2016-03-06 30 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

我做了你說的但問題是持續 –

相關問題