核心数据:创建关系 [重复]

Posted

技术标签:

【中文标题】核心数据:创建关系 [重复]【英文标题】:Core Data: Creating Relationships [duplicate] 【发布时间】:2013-10-11 11:57:25 【问题描述】:

我想知道是否有人愿意帮助我解决与核心数据相关的问题。我正在构建一个 iPhone 应用程序,现在需要创建从一个实体到另一个实体的关系。

我是核心数据、目标 c 和坦率地说是整个应用程序开发过程的新手,所以如果你有答案,请记住我可能会觉得很难理解 :-( 我花了很长时间扫描web 和阅读 Apple 的文档,但我无法解决这个问题。


我正在尝试将新数据插入实体并与不同实体中的现有对象建立关系。我已经设置了我的数据模型,创建了我的 NSManagedObjectSubClasses,并且可以将数据插入和管理到单个实体中,但我无法弄清楚如何使用关系。

例如,假设我有一个名为 Article 的实体和另一个名为 Author 的实体。我已经有一个作者列表。当我创建一篇新文章时,如何将这篇新文章链接到已存在的有关系的作者?

我需要哪几行代码来创建这种关系?

创建该链接需要哪些信息?

我感觉我的问题在于我试图与之建立关系的数据类型。 NSIndexPath、NSManagedObject 和 NSMutableSet 似乎都不对。

任何帮助将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

创建关系是设计实体的一部分,而不是代码行。假设您希望拥有与多个作者的文章的能力,您需要查看多对多类型的关系。 (作者将有一个称为文章的一对多关系,而文章将有一个称为作者的一对多关系,这是它的逆。)

然后您可以创建 Author 和 Article 子类,链接它们的对象的代码类似于:[myAuthor addArticlesObject:myArticle];

例如:

Author *myAuthor = [NSEntityDescription insertNewObjectForEntityForName:@"Author"
                                                 inManagedObjectContext:self.managedObjectContext];
myAuthor.name = @"Phillip Mills";
Article *myArticle = [NSEntityDescription insertNewObjectForEntityForName:@"Article"
                                                   inManagedObjectContext:self.managedObjectContext];
myArticle.title = @"Sample of linking core data entities";

NSError *error;
[myAuthor addArticlesObject:myArticle];
if (![self.managedObjectContext save:&error])

    NSLog(@"Database update failed: %@", error);

【讨论】:

感谢您这么快回复。我的设置与您描述的类似。我似乎无法掌握的部分是“myArticle”部分?它是什么?你能帮我分解一下你的代码行吗? myArticlemyAuthor 被假定为使用NSEntityDescriptioninsertNewObjectForEntityForName:inManagedObjectContext: 方法创建的对象。如果关系设置正确,addArticlesObject 应该存在于Author 类中。 再次感谢您,我想我到了那里,但我现在收到错误:“选择器'addArticlesObject:'没有已知的类方法”你知道为什么会发生这种情况吗? 如果它抱怨“类方法”,那么您可能使用的是 Author 类,而不是我有 myAuthor 的地方的对象。我将使用代码示例编辑我的答案。 现在我的数据库中有重复作者,有什么想法吗?

以上是关于核心数据:创建关系 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

具有现有关系奇怪问题的核心数据插入[重复]

Cocoa:如何避免核心数据重复关系?

从具有实体之间关系的核心数据中获取数据[重复]

核心数据一对多关系在获取新对象后失去关系[重复]

核心数据断言 sectionNameKeyPath 重复出现的多对多关系

实体框架核心关系问题(代码优先) - 重复列