iOS 简单数组谓词
Posted
技术标签:
【中文标题】iOS 简单数组谓词【英文标题】:iOS simple array predicate 【发布时间】:2013-11-05 20:04:27 【问题描述】:我的应用使用核心数据。我有加载核心数据记录的数据源(NSMutableArray)。 为了过滤记录,我使用了文本字段 (JSTokenField),它的 .m 文件中有 UITextField 委托。
当我过滤我的搜索结果时,我使用了一个简单的谓词:
-(void)textFieldChanged
NSString *fieldText =_toField.textField.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cLastName contains[cd] %@",fieldText];
NSArray *testArr = [coreDataSource filteredArrayUsingPredicate:predicate]; //coreDataSource is my MutableArray with all core data records
NSLog(@"%@",predicate);
NSLog(@"Testarr %@",testArr);
NSLog 返回空数组:
2013-11-05 20:53:36.765 MyApp[3045:60b] cLastName CONTAINS[cd] "a"
2013-11-05 20:53:36.766 Myapp[3045:60b] Testarr (
)
但是,当我更改(硬编码)我的谓词字符串时,如下所示: NSString *fieldText = @"a"; 在我的代码中,我得到了有效的结果。
2013-11-05 21:00:34.917 MyApp[3054:60b] cLastName CONTAINS[cd] "a"
2013-11-05 21:00:34.929 MyApp[3054:60b] Testarr (
"<MyUser: 0x1566fed0> (entity: MyUser; id: 0x156dbc30 <x-coredata://33798AE4-9768-4A2F-A0E8-C094F32972AD/MyUser/p5565> ; data: \n activities = \"<relationship fault: 0x1551c540 'activities'>\";\n etc...
我真的迷路了,为什么它不能与子类文本字段一起使用......
顺便说一句,coreDataSource 数组是自定义对象的数组,具有各种属性(cLastName 就是其中之一)
【问题讨论】:
为什么是 _toField.textField.text?应该是 _toField.text 好吧 _toField 是一个包含多个属性的类。标签、文本字段等。所以我必须访问它的文本字段属性。你可以在这里查看github.com/FivesquareSoftware/JSTokenField/blob/master/… 您是否尝试过使用 SELF.cLastName? 嗯,我不太确定,你是什么意思。在我的谓词中使用它?还是在哪里? @Yanchi:你能显示[fieldText dataUsingEncoding:NSUTF8StringEncoding]
的输出,以检查是否真的在字符串中?
【参考方案1】:
正如你在评论中所说,fieldText
转换为 UTF-8 是 e2 80 8b 41
。
UTF-8 e2 80 8b
是 Unicode U+200B (ZERO WIDTH SPACE)
。
我不能告诉你那个特殊的空格字符是从哪里来的,但是如果它发生了 只有在字符串的开头或结尾,你可以用
摆脱它fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
【讨论】:
谢谢马丁,这是一个很好的答案,我会接受它,但问题仍然存在......字符串“Abc”被转换为<e2808b41 6263>
。
NSString *fieldText =_toField.textField.text; NSLog(@"Before %@",[fieldText dataUsingEncoding:NSUTF8StringEncoding]); [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"After %@",[fieldText dataUsingEncoding:NSUTF8StringEncoding]);
抱歉输入混乱......我试过了,但是,它给了我同样的结果......也许我做错了什么:)
@Yanchi:您是否将修剪后的结果分配给fieldText
?您的代码看起来与我的答案不同。以上是关于iOS 简单数组谓词的主要内容,如果未能解决你的问题,请参考以下文章