【问题标题】:iOS: NSPredicate Issue with Magical Record?iOS:神奇记录的 NSPredicate 问题?
【发布时间】:2015-01-20 00:54:38
【问题描述】:

我的应用程序从服务器下载对象,并使用 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)>*

【问题讨论】:

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


    【解决方案1】:

    似乎您的objects 数组包含MyObject 的一个实例,而在谓词中您想通过objectId 属性(可能)是NSString 进行过滤。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多