2010-03-12 54 views
3

我正在尝试创建核心数据应用程序。 有些时候,试图挽救数据时,我看到以下错误:iPhone Coredata保存错误

错误:NSInvalidArgumentException, 原因:* -_referenceData64只为抽象类定义。定义 - [NSTemporaryObjectID_default _referenceData64]!, 说明:* -_referenceData64仅针对抽象类定义。定义 - [NSTemporaryObjectID_default _referenceData64]!

我不明白为什么会出现这个错误,以及如何避免它。有人能帮助我吗。

+2

你的模型看起来像什么样? – 2010-03-12 14:06:11

回答

3

编辑:下面的原始答案在技术上是正确的,但没有准确地描述错误的真实来源。运行时无法找到正确的属性,但找不到它的原因是因为该实体存在于另一个托管对象上下文中。 OP可能从未拥有任何实体的_referenceData64属性。

请参见:http://www.cocoadev.com/index.pl?TemporaryObjectIdsDoNotRespondToReferenceData

原来的答案:

您必须具有的属性_referenceData64类。在数据模型中,该类被标记为“abstract”,在数据模型编辑器中选择该实体并选中下面的“抽象”框,如果选中,则表示您的问题

抽象实体从来没有实例化过,除非有子类,否则实际上不能设置它的属性为任何值,抽象实体只是为子类提供模板

+1

这实际上并不正确。 _referenceData64是CoreData内部使用的一个隐藏的抽象根对象的属性,这个错误与你在模型中的内容没有任何关系,当你做错事情时(例如形成跨越MOC关系),你会经常看到它,尽管我我也相对相信了ere是一些内部的CoreData线程错误,这些错误也可能导致正确写入多线程代码。 – 2010-04-28 20:10:38

+0

你看起来是正确的。我以前从未打过这个,但除非我犯了一个特定的错误,否则我不会。但是,我的答案的基本概念是正确的。运行时正在尝试查找并且在该上下文中不存在的实体属性。显然,这足以让OP找到问题。 – TechZen 2010-04-29 13:10:43

+0

**附录:**由于Apple添加了[上下文并发类型支持](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#// apple_ref/doc/c_ref/NSManagedObjectContextConcurrencyType),这个错误也可以作为使用'NSMainQueueConcurrencyType'引入竞争条件的结果而抛出。这可以通过改变为'NSConfinementConcurrencyType'来解决。 – epologee 2012-11-14 13:57:15