NSManagedObjectContext -save:使用NSPredicate时崩溃

时间:2013-09-17 09:52:19

标签: ios core-data nspredicate nsfetchedresultscontroller

我的应用中有一个搜索栏和一些过滤器,可以创建两个谓词。一个用于搜索栏中的字符串,另一个用于过滤器(UISegmentedControl)。

当使用谓词并且我在上下文中插入一个对象然后调用-save:应用程序崩溃时:

CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  Can't use in/contains operator with collection 1379410732 (not a collection) with userInfo (null)

在保存时: point of crash (SIGABRT)

不使用谓词时不会发生这种情况。 我可以以某种方式在保存过程中删除谓词吗?我已经通过获取NSFetchRequest来尝试它,但我无法将其设置回控制器。

修改

我还尝试在self上添加NSManagedObjectContextDidSaveNotification作为观察者,然后使用-mergeChangesFromContextDidSaveNotification:,就像SO建议的讨论一样。这也没有帮助。

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。这很容易,但错误信息非常混乱,我没有看到正确的观点。

问题在于我使用的是[NSPredicate predicateWithFormat:@"number CONTAINS[cd] %@", string]

因此谓词在CONTAINS上使用了NSNumber。令人困惑的部分是谓词在查询数据库中的现有数据时正在工作。我仍然不理解这一部分,但它现在正在使用==比较器。