2016-03-06 27 views
0

我有实体的层次结构如下 enter image description hereNSFetchedResultsController节数为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() 
    ... 
} 

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

回答

1

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

+0

不,如果上下文是空的,我必须有3个部分它的真实 –

2

当创建一个带有组的frc时,第一个排序描述符必须与组密钥相同。

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

这应该创建你想要的部分。

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

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

+0

我做了你说的但问题是持续 –

相关问题