1

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

4

1 回答 1

1

正如您在评论中所说,fieldText转换为 UTF-8 是e2 80 8b 41.

UTF-8e2 80 8b是 Unicode U+200B (ZERO WIDTH SPACE)

我不能告诉你那个特殊的空格字符是从哪里来的,但如果它只出现在字符串的开头或结尾,你可以用

fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
于 2013-11-05T20:37:30.167 回答