我的应用程序使用核心数据。我有数据源(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...
我真的迷路了,为什么它不适用于子类文本字段...
btw,coreDataSource数组是自定义对象的数组,具有各种属性(cLastName就是其中之一)
答案 0 :(得分:1)
正如您在评论中所说,转换为UTF-8的fieldText
为e2 80 8b 41
。
UTF-8 e2 80 8b
是Unicode U+200B (ZERO WIDTH SPACE)
。
我无法告诉你这个特殊的空间角色来自哪里,但是如果它出现了 只有在字符串的开头或结尾,你可以用
去除它fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];