在我的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个部分。这是the project
答案 0 :(得分:2)
使用组创建frc时,第一个排序描述符必须与组密钥相同。
因此,创建另一个按workerType排序的排序描述符,并将其设置为数组中的第一个排序描述符。 (第二个排序描述符是firstNameSortDescriptor)。
然后应该创建您想要的部分。
另外......您是否在获取的结果控制器上调用performFetch
?
你需要调用它来让frc工作。
答案 1 :(得分:1)
假设您的coredata堆栈正常工作,并且您在每种类型的上下文中都插入了记录,这应该可行。但是如果你的上下文是空的,那么我希望该部分计数为0.