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”被转换为 所以我可能不得不使用不同的类JSTokenField. @Yanchi:上面的代码应该甚至可以使用&lt;e2808b41 6263&gt; NSString *fieldText =_toField.textField.text; NSLog(@"Before %@",[fieldText dataUsingEncoding:NSUTF8StringEncoding]); [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"After %@",[fieldText dataUsingEncoding:NSUTF8StringEncoding]); 抱歉输入混乱......我试过了,但是,它给了我同样的结果......也许我做错了什么:) @Yanchi:您是否将修剪后的结果分配fieldText?您的代码看起来与我的答案不同。

以上是关于iOS 简单数组谓词的主要内容,如果未能解决你的问题,请参考以下文章

谓词(NSPredicate)

使用自定义谓词对 numpy 数组进行排序

Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同

ios 谓词的使用

解析PFQuery谓词指针对象

iOS 谓词讲解