在 Core Data 中更改托管对象模型的属性值时崩溃
Posted
技术标签:
【中文标题】在 Core Data 中更改托管对象模型的属性值时崩溃【英文标题】:Crashing when Changing Attribute Value of Managed Object Model in Core Data 【发布时间】:2011-03-09 13:48:21 【问题描述】:我有一个表格视图控制器,它使用获取的结果控制器为每一行获取项目。选择行时,它将推动新的视图控制器以编辑该特定的托管对象模型 - 当我编辑并尝试保存我进行以下内容时。原因是什么? 谢谢
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 0 (not a collection) with userInfo (null)
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
_Unwind_Resume called from function -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] in image CoreData
.
【问题讨论】:
当您说“编辑特定的托管对象 model”时,您真的是指“托管对象”吗?两者有很大区别。 App is crashing when deleting from UITableView due to self referencing connection 的可能重复项 【参考方案1】:这部分错误:
...Can't use in/contains operator with collection 0 (not a collection)...
通常表示错误的谓词,最有可能在 fetch 或 fetched 属性上。您很可能尝试在谓词中使用 IN
或 CONTAINS
运算符,但没有提供目标对象属性可能包含的实际值集合。例如
NSPredicate *p=[NSPredicate predicateWithFormat:@"attribute1 IN %@", @"a string not an array"];
...对比:
NSArray *inCollection=[NSArray arrayWithObjects:@"Tom",@"Dick",@"Harry",nil];
NSPredicate *p=[NSPredicate predicateWithFormat:@"attribute1 IN %@", inCollection];
大概,您在编辑中所做的更改正在破坏您在表提取中的谓词。您还需要确保已实现获取结果控制器的委托方法,以便在插入、删除或更改对象时,表格将正确更新以反映这些更改。
(错误的其余部分无关紧要。这只是一个框架警告,您无能为力。)
【讨论】:
以上是关于在 Core Data 中更改托管对象模型的属性值时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 Core Data 的人想要在同一个托管对象模型中使用多个持久存储?
从现有 XSD 创建托管对象模型 - iPhone Core Data