NSFetchedResultsController节号是0

我有以下层次的实体 在这里输入图像说明

在我的TableViewController我有以下代码:

private lazy var fetchedResultsController: NSFetchedResultsController = { let fetchRequest = NSFetchRequest(entityName: "Worker") let workerTypeSortDescriptor = NSSortDescriptor(key: "workerType", ascending: true) let firstNameSortDescriptor = NSSortDescriptor(key: "firstName", ascending: true) fetchRequest.sortDescriptors = [workerTypeSortDescriptor, firstNameSortDescriptor] guard let stack = CoreDataStackSingleton.sharedInstance.coreDataStack else {return NSFetchedResultsController()} let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: stack.mainQueueContext, sectionNameKeyPath: "workerType", cacheName: nil) frc.delegate = self return frc }() ... override func numberOfSectionsInTableView(tableView: UITableView) -> Int { if let sections = fetchedResultsController.sections { print(sections.count) return sections.count } return 0 } ... func viewDidLoad(){ ... try fetchedResultsController.performFetch() ... } 

而我总是从print(sections.count)得到0我不知道为什么,因为我有3个实体,我假设得到3个部分。 这是项目

假设你有你的coredata堆栈工作,你有每个types的上下文插入logging这应该工作。 但是如果你的上下文是空的,那么我认为该部分计数为0。

使用组创buildfrc时,第一个sorting描述符必须与组密钥相同。

因此,创build另一个sorting描述符,按workerTypesorting,并将其设置为数组中的第一个sorting描述符。 (第二个sorting描述符是firstNameSortDescriptor)。

这应该然后创build您想要的部分。

另外…你是否在调用结果控制器调用performFetch

你需要打电话给frc才能工作。