2011-04-17 123 views
0

好吧,我以爲我有這個,但我沒有得到我期待的結果。希望有人能幫助。核心數據關係獲取

我有兩個實體人和時間表與一個屬性對多關係: Person.timesheet < --- >> Timesheet.user。 下面的代碼工作,但是當我嘗試添加第二個時間表條目時,它似乎覆蓋第一個?

我看了一下Apple Docs,他們對這個主題有些模糊。

//Add 

NSManagedObjectContext *context = self.managedObjectContext; 
Person *personAdded = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]; 
Timesheet *timesheet = [NSEntityDescription insertNewObjectForEntityForName:@"Timesheet" inManagedObjectContext:context];; 
timesheet.time = @"10:00 Friday"; 
timesheet.timestamp = [NSDate date]; 

NSSet *timesheetSet = [NSSet setWithObject:timesheet]; 

personAdded.name = @"Darren"; 
personAdded.job = @"Job to be Done"; 
personAdded.timesheet = timesheetSet; 

NSError *error = nil; 
[context save:&error]; 

if (error) { 
    NSLog(@"[ERROR] COREDATA: Save raised an error - '%@'", [error description]); 
} 

NSLog(@"[SUCCESS] COREDATA: Inserted new User to database!"); 

// Load 

NSEntityDescription *personEntity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity: personEntity]; 

error = nil; 
NSArray *results = [context executeFetchRequest:request error:&error]; 

if (!results || error) { 
    NSLog(@"[ERROR] COREDATA: Fetch request raised an error - '%@'", [error description]); 
    [request release]; 
} 
NSLog(@"Results: %@",results); 

Person *firstUser = [results objectAtIndex:0]; 

NSLog(@"First User's name: %@",firstUser.name); 
NSLog(@"First User's time %@",[[firstUser.timesheet anyObject] valueForKeyPath:@"timestamp"]); 

我想知道如果它可能是因爲我實際上設置Person.timesheet鍵與NSSet而不是實際的表?或者可能是因爲我沒有正確地調用結果?

感謝, 達倫

回答

0

你應該在你Person.h文件生成的「CoreDataGeneratedAccessors」的方法,讓你的方法

[personAdded addTimesheet:timesheetSet]; 

這會創建的鏈接?

核心數據通常會爲您定義的任何關係生成一個add和remove方法。

如果不清楚,請發送您的person.h文件。

+0

嘿,謝謝你。我認爲這些方法可能是答案,但我從來沒有能夠讓他們工作。在閱讀你的迴應之後,我再看看它,並意識到我必須將這些方法添加到頭文件中。一旦我這樣做了,我可以稱它爲工作,但當我打電話時,我收到一個警告,指出'NSSet'可能不會響應'addTimesheet:'。我已經看了其餘的代碼,它看起來都很好?任何想法 – EcksMedia 2011-04-18 03:52:04

+0

現在它的一切都很好,錯誤是我的錯,試圖在personAdded.timesheet上運行該方法,而不僅僅是人員添加。非常感謝解決方案,我很高興它是如此簡單。 – EcksMedia 2011-04-18 04:15:04