2010-03-12 99 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