【问题标题】:Core Data - query to-many relationship核心数据 - 查询对多关系
【发布时间】:2014-01-03 23:01:49
【问题描述】:

我有一个看起来像这样的核心数据模型:

Author
======
- name
- bio

- books (to-many relationship)


Book
====
- title
- release date

- author (to-one relationship)  

我向用户呈现作者的表格视图,每个表格单元格代表一个作者,并显示他的name 和他写的最新一本书的title

为了显示作者列表,我使用NSFetchedResultsController 和以下NSFetchRequest

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Author"];
request.predicate = nil;
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
request.fetchBatchSize = 20;  

我的问题是:

我应该如何获得每位作者最新一本书的标题?我可以在我的原始请求中获取该信息还是需要做一些额外的请求?

【问题讨论】:

    标签: ios iphone objective-c core-data nsfetchedresultscontroller


    【解决方案1】:

    如果您已经有一个Author 托管对象,则无需执行另一个提取请求。只需从Authorbooks 属性创建一个排序数组。为此,您可以使用NSSetsortedArrayUsingDescriptors: 方法并传入一个按发布日期排序的描述符。

    【讨论】:

    • 这意味着我正在从数据库中加载所有作者的书籍,只是为了获取其中一本。
    • @Eyal 你是对的。这对一位作者来说很好,但对表格视图中的每一位作者都不是。所以我会使用格罗内瓦尔德的回答。我的回答更注重教学而非务实。
    【解决方案2】:

    要将其作为同一请求的一部分,您可以在存储最新书籍的 Author 对象上包含一个属性

    Author
    ======
    - name
    - bio
    - latestBook
    
    - books (to-many relationship)
    

    然后要获取详细信息,只需使用author.latestBook.title

    当您将最新书籍添加到books 属性时,您还需要设置latestBook 属性。

    或者,它可能是您根据最新的releaseDate 从账本中计算出的一个临时属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      相关资源
      最近更新 更多