【问题标题】:Why is my many-to-many relationship not being retrieved by NSFetchedResultsController?为什么 NSFetchedResultsController 没有检索到我的多对多关系?
【发布时间】:2015-08-04 15:12:40
【问题描述】:

我有一个表格视图,我在其中创建了一组(部分)和伙伴(行)的分段列表。 buddies和bundles之间的关系在核心数据中是多对多的。我想使用 NSFetchedResultsController 为这个 tableview 提供数据。 注意:我使用this tutorial 来设置 NSFetchedResultsController

这是我的 NSFetchedResultsController:

lazy var fetchedResultsController: NSFetchedResultsController = {
    let bunchesFetchRequest = NSFetchRequest(entityName: Constants.CoreData.bunch)
    // "name" refers to the bunch name
    let primarySortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector: "caseInsensitiveCompare:")
    bunchesFetchRequest.sortDescriptors = [primarySortDescriptor]

    let frc = NSFetchedResultsController(
        fetchRequest: bunchesFetchRequest,
        managedObjectContext: CoreDataStackManager.sharedInstance().managedObjectContext!,
        sectionNameKeyPath: "name",
        cacheName: nil
    )
    frc.delegate = self
    return frc
}()

当我去获取一堆好友的数量时,我总是得到一个没有好友的集合。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if let sections = fetchedResultsController.sections {
        let currentSection = sections[section] as! NSFetchedResultsSectionInfo
        let bunch = currentSection.objects[0] as! Bunch
        return bunch.buddies.count  // always returns 0
    }
    return 0
}

与 NSFetchedResultsController 或其他我应该得到计数的方式有什么额外的关系吗?如果您可以用核心数据内部结构解释这里发生了什么,那也会很有帮助。谢谢!

【问题讨论】:

    标签: ios swift core-data many-to-many nsfetchedresultscontroller


    【解决方案1】:

    您应该使用预取。使用预取,你告诉 Core Data 当你执行一个 fetch 来获取你指定的相关对象。所以添加这一行,当你获取数据包时,你告诉 Core Data 预取相关的伙伴。

    bunchesFetchRequest.relationshipKeyPathsForPrefetching = ["buddies"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多