为什么NSFetchedResultsController没有检索到我的多对多关系?

时间:2015-08-03 14:26:45

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

我有一个tableview,我正在创建一个分段(部分)和伙伴(行)的分段列表。伙伴和串之间的关系是核心数据中的多对多关系。我想使用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或其他方式进行额外的计算?如果你能用核心数据内部解释这里发生的事情,那也会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该使用预取。通过预取,您可以在执行提取时告知Core Data以获取指定的相关对象。所以添加这一行,当你获取Bunches时,你告诉Core Data预取相关的伙伴。

bunchesFetchRequest.relationshipKeyPathsForPrefetching = ["buddies"]