gpt4 book ai didi

ios - 关系中的实体如何知道加入什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:33 24 4
gpt4 key购买 nike

这是一个从基于 SQL 的数据库过渡过来的人提出的一个基本问题,我通常不予理睬,但我真的很想了解这个问题。当两个实体加入关系时,Core Data 如何确定要加入的属性?它是通过匹配属性名称来计算的,还是它是如何知道的?

我想了解为什么以下代码不起作用。

我有一个实体 Books,其属性如下:

aid|authorname

我有另一个实体,具有属性的作者

bid|bookname|authorid

//note authorid here is spelled differently than in the author entity.

Authors 与名为 book 的 Books 有很多关系书籍与名为作者的作者有一种关系。

在 VC 书籍中,在我的 .h 文件中

@property (nonatomic,weak) Books * book;

在 .m 文件中,我在 ViewDidLoad 中有以下代码

NSString *authorname = self.book.author.authorname;
//this is supposed to be book-object.author-relationship,authorname-attribute
//however it displays blank
NSLog(@"author name%@",authorname); //displays blank

我在应用程序的其他地方有非常相似的代码运行良好(尽管这两种关系是一对一的)所以我想我一定在某处遗漏了一些愚蠢的东西。

但是,这让我想知道 core-data 究竟是如何确定哪个作者与哪些书相配的?

属性名称是否应该匹配?

感谢任何见解。

最佳答案

CoreData“知道”当且仅当您告诉它两个对象相关时,您通过(假设您已经在数据模型编辑器中定义了关系)将一个对象分配给另一个对象的关系属性来做到这一点:

myBook.author = myAuthor;

或等效

[myAuthor addBooksObject:myBook];

完成后,CoreData 将“知道”这两个对象是相关的(即使您保存数据然后重新加载它)。这完全独立于您可能认为表明两个对象相关的属性(例如 aidauthorid)。

如果您希望 BooksAuthor 相关,并且 aid 等于 Book 的 authorid,您以这种方式进行编程。因此,例如,如果您使用 aid = 123 从您的服务器同步一个 Author,然后使用 authorid = 同步一些 Books 123,你需要获取(除非你已经有对它的引用)aid = 123Author,并设置与代码类似的关系以上。我怀疑是您错过了这一步,并导致作者姓名空白。

如果您在同步过程中执行此操作,此后您可以只依赖关系,无需担心主键、外键、连接等。在幕后,CoreData 为每个实体维护一个唯一的主键, 以及每个关系的外键。如果您直接检查底层 SQLite 数据库和/或如果您激活 SQLDebug,您可以看到这些。

关于ios - 关系中的实体如何知道加入什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com