NSManagedObjectContext -save:使用 NSPredicate 时崩溃
Posted
技术标签:
【中文标题】NSManagedObjectContext -save:使用 NSPredicate 时崩溃【英文标题】:NSManagedObjectContext -save: crashes when using NSPredicate 【发布时间】:2013-09-17 09:52:18 【问题描述】:我的应用中有一个搜索栏和一些过滤器,它们创建了两个谓词。一个用于搜索栏中的字符串,一个用于过滤器 (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 的一次讨论所建议的那样。这也没有帮助。
【问题讨论】:
也许显示谓词? 谢谢马丁,我刚刚发现了问题。该解决方案仍有一个令人困惑的部分,但崩溃已修复。你是对的,它是谓词。 【参考方案1】:我发现了我的问题。这很容易,但是错误消息太混乱了,以至于我没有看对点。
问题是我使用的是[NSPredicate predicateWithFormat:@"number CONTAINS[cd] %@", string]
。
所以谓词在NSNumber
上使用CONTAINS
。令人困惑的部分是谓词在从数据库中查询现有数据时起作用。我仍然不明白这部分,但它现在可以与==
比较器一起使用。
【讨论】:
以上是关于NSManagedObjectContext -save:使用 NSPredicate 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObjectContext:撤消保存操作?
CoreData 多 NSManagedObjectContext 保存通知说明
NSManagedObjectContext: performBlockAndWait vs performBlock 通知中心