我正在尝试从Core Data中获取对象,其'name'属性包含特定的NSString sPersonName 。以下代码就是这样做
NSString *sPersonName = @"Some Value";
NSFetchRequest<Entity*>* request = [Entity fetchRequest];
[request setPredicate:[NSPredicate predicateWithFormat:@"name CONTAINS[c] %@", sPersonName]];
NSError *error;
NSArray *arrResults = [self.persistentContainer.viewContext executeFetchRequest:request error:&error];
此代码执行正常,我正在按预期获得结果。
但是如果我没有从上层请求得到任何结果,我会尝试从Core Data中获取对象,以便 sPersonName字符串CONTAINS已保存对象的'name'属性值。 以下是该代码。
request = [Entity fetchRequest];
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ CONTAINS[c] name", sPersonName]];
arrResults = [self.persistentContainer.viewContext executeFetchRequest:request error:&error];
此命令失败并崩溃创建以下错误的应用
-[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x170a43750
2017-01-24 23:02:28.124224 TestApp[2934:845977] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x170a43750'
任何人都可以指导我做错了什么吗? 非常感谢。
答案 0 :(得分:0)
因此,经过几天的反复试验,我找到了解决方案。 NSPredicate 期望数据结构对象(例如 NSArray )位于CONTAINS的左侧。传递 NSString 对象会破坏它。
因此,解决方案是将NSString转换为NSArray。下面的代码运行正常。
paste