CoreData关系使用



我是CoreData的新手,对它的掌握相对较好,只是现在我开始研究关系,需要一些帮助。

我的应用程序中的一个问题让我思考了一下,我有两个实体,TableInfo和PersonInfo。

一张桌子可以有很多人坐,但一个人只能坐在一张桌子旁。所以我知道在这方面,这将是一种一对多的关系,这在现实世界中也很有意义。

无论如何,在我的应用程序中,我为我的人添加了一张桌子,所以我基本上说,这些人坐在这张桌子旁。然而,如果我去删除我已经给一个人的表格,我该如何处理?

我认为人际关系可能会在这里发挥作用,但我以前从未与他们共事过,所以我很难理解该去哪里。

如果有人知道有什么好的教程可以帮助解决这个问题,或者详细介绍核心数据关系,或者你可以帮助我,我会非常感激,谢谢,或者让我知道我是否在这个问题上弄错了关系树。

谢谢!

这是一个使用核心数据关系的好情况。

通常的苹果文档(https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/HowManagedObjectsarerelated.html)会让你很好地了解它是如何工作的。

简而言之,对于关系,您可以指定删除规则。在你的情况下,你可能会选择";Nullify";。这意味着,如果删除该表,您的人员的表属性将变为null,表示您的人员不再坐在表上。

编辑:您也可以指定";级联";这会把这个人和桌子一起删除(这个想法很没有意义,但有点好笑)。或者,您可以指定";"拒绝";,如果至少有一个人仍然坐在桌子上,则其将中止删除。

示例:

假设你有两个实体;TableInfo";以及";PersonInfo"PersonInfo";具有被称为"em"的关系;表"TableInfo";具有被称为"em"的关系;人"表";是一对一关系;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会自动为您创建合适的访问者。只要使用它们。

您现在可以执行以下操作:

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上提问,但对于";基本的";需要互联网上的教程会更加完整和有用。

看看第12讲和关于如何建立关系的shutterbug示例。他用了一个摄影师来拍摄关系,就像你的桌子和人之间的关系一样。该讲座可能在2010-11年秋季或春季仍然可以在iTunesU上以CS193P的形式提供。

此链接提供幻灯片和示例。http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall

最新更新