我的应用程序利用核心数据。我有加载核心数据记录的数据源(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 就是其中之一)