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而不是實際的表?或者可能是因爲我沒有正確地調用結果?
感謝, 達倫
嘿,謝謝你。我認爲這些方法可能是答案,但我從來沒有能夠讓他們工作。在閱讀你的迴應之後,我再看看它,並意識到我必須將這些方法添加到頭文件中。一旦我這樣做了,我可以稱它爲工作,但當我打電話時,我收到一個警告,指出'NSSet'可能不會響應'addTimesheet:'。我已經看了其餘的代碼,它看起來都很好?任何想法 – EcksMedia 2011-04-18 03:52:04
現在它的一切都很好,錯誤是我的錯,試圖在personAdded.timesheet上運行該方法,而不僅僅是人員添加。非常感謝解決方案,我很高興它是如此簡單。 – EcksMedia 2011-04-18 04:15:04