iOS:神奇记录的NSPredicate问题?

时间:2015-01-20 00:54:39

标签: ios objective-c parse-platform nspredicate magicalrecord

我的应用程序从服务器下载对象,并使用Magical Record将每个项目添加到Core Data中。我不是每次都删除每个对象并重新下载所有内容,而是只想下载新项目(我已经想出了这一部分),并检查服务器上的对象(解析)是否已被删除,从而在本地删除它们同步它(这是我遇到的麻烦)。

我要做的是获取存储在Core Data中的所有对象,并使用NSPredicate过滤器,从Core Data获取此本地数组中存在的项目数组,但不会检索到的对象(这将是表示它们已在服务器上删除...我正在使用Parse),所以我想删除它们。

这就是我正在做的事情:

//Fetch local objects from core data (objects is an array returned by the server)
NSPredicate *deletedObjectsOnServer = [NSPredicate predicateWithFormat:@"NOT (objectId IN %@)", objects];
NSArray *localObjectsArray = [MyObject MR_findAllWithPredicate:deletedObjectsOnServer];

NSLog(@"Deleted Files on server: %@", localObjectsArray);

问题是我收到以下错误:

*Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'unimplemented SQL generation for predicate : (objectId IN     
{<MyObject:0x156e8210, objectId: WXwBOQ73KS, localId: (null)>*

1 个答案:

答案 0 :(得分:1)

好像你的objects数组包含MyObject的实例,而在谓词中你要按objectId属性过滤(可能)NSString

更改传递给NSPredicate的数组以包含objectId值应该可以解决问题:

NSPredicate *deletedObjectsOnServer = [NSPredicate predicateWithFormat:@"NOT (objectId IN %@)", [objects valueForKey:@"objectId"]];