2011-11-08 217 views
3

我有一个非常奇怪的错误发生在一直在工作了很长时间的应用程序。奇怪的CoreData错误...从insertNewObjectForEntityForName返回的值:似乎损坏

我不能再在我的CoreData模型中创建一个我的实体。

当我在我的模型创建一个特定实体,并尝试使用的NSLog打印(@ “%@”,OBJ),我得到这个奇怪的消息:

2011-11-08 13:03:05.936 iLearnFast [31541:15503] - [__ NSCFNumber objectID]:无法识别的选择器发送到实例0xa069e20

当我遍历该对象的属性/关系并打印出来时,一个特定的一对一关系返回一个奇怪的值[ obj valueForKey:]。它返回的值与上述错误消息中提到的指针/对象相同。

我以为我可能在某处破坏了内存,但是在初始化数据结构时,我插入了代码以在可执行文件的开头创建实体,并且出现同样的问题。我非常有信心,在这一点上我还没有犯过任何内存错误(并且内存错误会更随机......我可以创建数千个对象,并且总是同一个实体具有相同关系的相同问题,并且不会其他实体有问题)。

缩小的问题,这一个关系后,我发现我可以使误差通过重命名为任何其他关系消失。自我的App创建以来,这种关系被称为“文件”。

我可以通过重命名属性再次让我的代码工作,但它打乱了我的自动迁移轻巧,但现在我不得不面对搞清楚如何做一个更复杂的迁移。

如果任何人有任何想法可能会出错,我会非常感激。

这让我感到莫名其妙,感觉就像是Apple SDK中的一个bug。

我目前使用的XCode 4.2,并试图为双方iOS5.0和的iOS4.3和两个有相同的行为无论是软件开发工具包。

罗恩

回答

4

2011-11-08 13:03:05.936 iLearnFast [31541:15503] - [__ NSCFNumber 的objectID]:无法识别的选择发送到实例0xa069e20

我猜你有代码泄漏。此行意味着您尝试访问您的自定义NSManagedObject中包含的objectID属性,但出于某种原因该对象不再存在。尝试检查内存泄漏的代码。

+0

感谢您的回复!所以我的对象不知何故有一个腐败的objectID?我把这段代码放在VERY开始,当我的应用程序除了创建托管对象模型/托管对象上下文之外什么也没做。另外......泄漏怎么会导致这个问题呢?我认为我可能会随机地在某处记忆内存,但是在创建对象的调用之后立即发生此错误。 – Ron

+0

我也尝试改变我的对象不是一个自定义对象,而是直接作为一个NSManagedObject。同样的问题。当我创建NSManagedObject时,一个特定的关系被一个虚假的objectID所损坏。 – Ron

+0

也许当你保存上下文时,coredata试图保存所有的对象,并且你收到了这个错误? – beryllium

4

我看到这个相同的问题出现在使用核心数据的Swift项目中。当我将应用程序推到设备上时(这在模拟器中一直运行良好一段时间),问题只会引起人们的注意。

该问题集中在两个实体之间的关系上。为了说明问题,看图片:

Problem

SO四处寻找了一段时间后,我决定重新命名的关系,队长球员。见Fix影像:

Fix

仅重命名这两个关系的“末端”后没有错误消失。

+0

这也适用于我。任何人有任何想法为什么? – lostintranslation

1

我有同样的错误消息,在我的情况下,原因是我有关系属性teacher并创建只读属性isTeacher

这个问题引起的Objective-C名称约定:CoreData在得到teacher属性时感到困惑。而不是访问真正的关系,并给我真正的对象,它采取isTeacher获得与BOOL类型,将它投到NSNumber并试图处理它像CoreData关系和调用objectID

重命名后isTeacherisTeacherLicence问题没有了。

+0

我有同样的问题,称为竞争对手的关系属性,以及名为isCompetitor的计算属性。将isCompetitor重命名为isCompetitorDisplay解决了该问题。谢谢! – Marmoy