我有一個帶有以下接口的NSManagedObject。核心數據可可錯誤1570.無法保存多個實體對象
@class Organization, Person;
@interface Assistance : NSManagedObject
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) Organization *organization; // Not optional, 1 to 1
@property (nonatomic, retain) NSSet *persons; // 1 to many
@end
人與組織有1-1關係。 協助與組織和有1-1的關係與Person有1-may關係。
我第一次嘗試保存輸入時,它完美地工作,但不是第二次。
案例情景:我添加一個實體,日期2013-07-26 00:00:00 +0000,其各自的組織和人員。
我重新啓動應用程序。它執行搜索當前日期(7/27)並且沒有找到任何東西。我開始編輯應用程序中的東西,因此它使用MagicalRecord的便捷方法創建了一個新實體[Assistance createEntity];我立即設定日期(7/27)和組織。 Person對象被添加或刪除。當選擇另一個日期,我儘量保存當前援助對象實體,爲了這個,我已經實現了setCurrentDate方法自己:
- (void)setCurrentDate:(NSDate *)currentDate
{
if (assistanceWasChanged) {
NSLog(@"> > > Has changed, need to save with Persons {%i}, org {%@}, date {%@}", [self.assistance.persons count], self.organization.name, self.currentDate);
// [[NSManagedObjectContext defaultContext] saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { NSLog(@"> > > 01:Assistance saved?"); }];
[[NSManagedObjectContext defaultContext] saveOnlySelfAndWait];
}
assistanceWasChanged = NO;
_currentDate = currentDate;
[self setCurrentAssistance]; // Tries to find Assistance with new date
}
但是這一次,它不會保存。我得到一個可可錯誤1570(並非所有必填字段都已填充):
> > > Has changed, need to save with Persons {1}, org {MSF}, date {2013-07-27 00:00:00 +0000}
2013-07-27 20:23:41.017 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Saving <NSManagedObjectContext (0x8d61e50): *** DEFAULT ***> on *** MAIN THREAD ***
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Parents? 0
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Synchronously? 1
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8d61e50) Context DEFAULT is about to save. Obtaining permanent IDs for new 1 inserted objects
2013-07-27 20:23:41.019 CoreData: sql: BEGIN EXCLUSIVE
2013-07-27 20:23:41.019 CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
2013-07-27 20:23:41.020 CoreData: sql: COMMIT
2013-07-27 20:23:41.021 +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x6b3a0) Error: <Assistance: 0x9cb16c0> (entity: Assistance; id: 0x9e5ac00 <x-coredata://15A3-4C6D-4025-9131-3D51048/Assistance/p1> ; data: {
date = "2013-07-26 00:00:00 +0000";
organization = nil;
persons = "<relationship fault: 0x8d80500 'persons'>";
})
沒有時間點是組織零。另外,日期'2013-07-26'的對象從未被獲取/編輯。正如我的日誌聲明顯示的,我試圖添加的新對象的日期爲'2013-07-27'。 起初我以爲CoreData有一個指向舊數據的指針,但事實並非如此,插入的第一個日期從未被獲取。 (當我重新啓動應用程序,第一目標(7/26)仍然存在 如果它的確與衆不同,援助實體對象是我實現文件的屬性:
@property (strong, nonatomic) Assistance *assistance;
我失去的東西關於核心數據? 爲什麼保存一個新的實體對象時,被訪問的第一插入的對象?爲什麼是組織零?
也許顯示創建新對象的代碼,包括您設置組織的部分? – ophychius
還有很多其他地方可能出現問題。這裏的主要問題是我不確定你是否理解上下文的概念。對象與上下文綁定,並且您需要保存上下文以便數據持久化,然後您可以稍後搜索它。在這段代碼中,我沒有看到任何「錯誤」,但我也覺得我沒有全部的圖片來指出問題。 – casademora
@casademora謝謝掃羅!我想相信我理解上下文的想法,但我會再看一次。我的問題是我的3個實體中有2個具有錯誤的關係多樣性。 – Eric