我有一个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或其他方式进行额外的计算?如果你能用核心数据内部解释这里发生的事情,那也会有所帮助。谢谢!
答案 0 :(得分:0)
您应该使用预取。通过预取,您可以在执行提取时告知Core Data以获取指定的相关对象。所以添加这一行,当你获取Bunches时,你告诉Core Data预取相关的伙伴。
bunchesFetchRequest.relationshipKeyPathsForPrefetching = ["buddies"]