我的应用中有一个搜索栏和一些过滤器,可以创建两个谓词。一个用于搜索栏中的字符串,另一个用于过滤器(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)
在保存时:
不使用谓词时不会发生这种情况。
我可以以某种方式在保存过程中删除谓词吗?我已经通过获取NSFetchRequest
来尝试它,但我无法将其设置回控制器。
修改
我还尝试在self
上添加NSManagedObjectContextDidSaveNotification
作为观察者,然后使用-mergeChangesFromContextDidSaveNotification:
,就像SO建议的讨论一样。这也没有帮助。
答案 0 :(得分:1)
我发现了我的问题。这很容易,但错误信息非常混乱,我没有看到正确的观点。
问题在于我使用的是[NSPredicate predicateWithFormat:@"number CONTAINS[cd] %@", string]
。
因此谓词在CONTAINS
上使用了NSNumber
。令人困惑的部分是谓词在查询数据库中的现有数据时正在工作。我仍然不理解这一部分,但它现在正在使用==
比较器。