这个答案阐述了Riley Dutton关于错误信息被误导的评论中描述的情况。
当您传递的对象是而不是 NSManagedObject的子类别为deleteObject:
时,将显示错误消息。 Riley只是通过明确传入错误的对象来解决问题,但我通过核心数据更改来到那里。
我的项目部署的目标设定为7.0,而这个代码工作,甚至没有在iOS 9.3上运行的错误:
NSArray *entries = @[self.colorList.colors, self.emotionList.emotions, self.shapeList.shapes];
for (id entry in entries) {
[[self managedObjectContext] deleteObject:entry];
}
当我的项目部署目标更新到9.3,我开始的错误消息。
这里是entry
说明:
Relationship 'colors' fault on managed object (0x7fd063420310) <MyColorList: 0x7fd063420310> (entity: MyColorList; id: 0xd000000000640006 <x-coredata://12556DEF-F77E-4EFF-AAE6-55E71A3F5420/MyColorList/p25> ; data: {
attachedThing = "0xd0000000000c0004 <x-coredata://12556DEF-F77E-4EFF-AAE6-55E71A3F5420/MyThing/p3>";
colors = "<relationship fault: 0x7fd063468f30 'colors'>";
})
它看起来像苹果改变了当核心数据会引发故障,实际上是从持久存储协调拉动数据的规则。
这一修改解决了这个问题:
NSArray *entries = @[self.colorList.colors, self.emotionList.emotions, self.shapeList.shapes];
for (id entry in entries) {
for (id e in entry) {
[[self managedObjectContext] deleteObject:e];
}
}
在这个时候,我不知道如果这是解决这个问题的理想方式,如果有更规范的方式来告诉核心数据引发故障并从磁盘读取数据。
我使用managedObjectContext伊娃在应用程序委托(放在那里通过Xcode中,当我创建的项目)。导致错误引用的代码使用[[[UIApplication sharedApplication]委托] managedObjectContext]。整个应用只有一个实例。 – cetcet 2011-05-03 05:44:20
只需修复它。这是一个错字 - 与上下文无关。对不起,感谢您的帮助! – cetcet 2011-05-03 06:07:53
对于任何人碰到这个即将在谷歌搜索,你可能会如果你是传递一个无效的对象或其他输入错误代码'[managedObjectContext DeleteObject的]收到此错误;'我是路过的'的NSNumber *'事故,它是给我这个错误,而不是告诉我我应该传递一个'NSManagedObject *'。 – 2011-10-25 10:36:33