iOS简单数组谓词

时间:2013-11-05 20:04:28

标签: ios nsarray nspredicate

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

1 个答案:

答案 0 :(得分:1)

正如您在评论中所说,转换为UTF-8的fieldTexte2 80 8b 41

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

我无法告诉你这个特殊的空间角色来自哪里,但是如果它出现了 只有在字符串的开头或结尾,你可以用

去除它
fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];