在 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 属性上。您很可能尝试在谓词中使用 INCONTAINS 运算符,但没有提供目标对象属性可能包含的实际值集合。例如

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

使用 xcode 和 core-data 中的代码创建托管对象

Core Data 中的可变和不可变托管对象模型有啥区别?

有两个相同模型版本时的 Core Data 迁移

Core Data 托管对象上下文线程同步