這是一個很好的情況,你會使用核心數據關係。
通常的Apple文檔(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html)會讓你很好地理解它是如何工作的。
總之,對於一種關係,您可以指定一個刪除規則。 就你而言,你可能會選擇「Nullify」。這意味着,如果您刪除表格,則您的Person的表格屬性將變爲null,表示您的人員不再坐在桌子上。
編輯:你也可以指定「Cascade」,它會將表格與表格一起刪除(而不是毫無意義,但略微有趣的想法)。或者,您可以指定「拒絕」,如果至少有一個人仍然坐在桌子上,則會中止刪除。
例子:
假設你有兩個實體, 「TableInfo」 和 「PersonInfo」。 「PersonInfo」具有的關係稱爲「表」,「TableInfo」具有關係稱爲「個人」。 「table」與作爲其目標的「TableInfo」是一對一的關係。 「人物」與「PersonInfo」作爲目標是一對多的關係。
現在將「人員」的「反向關係」設置爲「表格」。 「表格」的「反向關係」將自動設置爲「人員」。
如果你讓CoreData生成模型的子類(!你應該),你最終會像這樣一類:
@interface TableInfo : NSManagedObject
@property (nonatomic, retain) NSSet *persons;
@end
@interface TableInfo (CoreDataGeneratedAccessors)
- (void)addPersonsObject:(PersonInfo *)value;
- (void)removePersonsObject:(PersonInfo *)value;
- (void)addPersons:(NSSet *)values;
- (void)removePersons:(NSSet *)values;
正如你所看到的,CoreData自動爲您創建appropiate存取。只要使用它們。
您現在可以執行以下操作:
TableInfo* myTable = [NSEntityDescription insertNewObjectForEntityForName:@"TableInfo" inManagedObjectContext:self.managedObjectContext];
PersonInfo* myPerson = [NSEntityDescription insertNewObjectForEntityForName:@"PersonInfo" inManagedObjectContext:self.managedObjectContext];
[myTable addPersonsObject:myPerson];
NSLog(@"%@", myPerson.table); // will be your TableInfo object "myTable"
總之,請閱讀我上面鏈接的文檔,有大量的實例,並在互聯網上。隨意就SO提出問題,但對於「基本」需求,互聯網上的教程將更加完整和有用。
啊,非常有用。但是,如何將一個人添加到表格中?由於人不是表的屬性,並且實體不能是實體的屬性。 – 2012-03-25 20:49:57
只需定義關係,讓CoreData爲您創建類。您可以訪問與屬性相同的關係,即您將提供[TableInfo addPersonInfo:]和[PersonInfo setTableInfo:]等。 – JiaYow 2012-03-25 20:54:49
感謝您的幫助,抱歉,您必須忍受我的困擾。事情變得清晰了。我的應用程序中的核心數據使用情況取決於Apples自己的CoreData Books示例代碼。因此,例如,用戶可以使用UINavigationViewController跳過,選擇一個訪客,然後編輯該訪客的屬性,例如其名稱和表格。有了這種關係,我是否像正常一樣對待table屬性?但改爲使用關係名稱作爲關鍵?等 – 2012-03-25 23:14:05