Ios NSFetchedResultsSwift中的控制器计数

Ios NSFetchedResultsSwift中的控制器计数,ios,swift,core-data,nsfetchedresultscontroller,Ios,Swift,Core Data,Nsfetchedresultscontroller,我是一名来自Objective-C背景的Swift开发新手 我有以下代码: class KPCoreDataResultsController: NSObject, NSFetchedResultsControllerDelegate { var fetchedResultsController: NSFetchedResultsController let managedObjectContext = (UIApplication.sharedApplication().d

我是一名来自Objective-C背景的Swift开发新手

我有以下代码:

class KPCoreDataResultsController: NSObject, NSFetchedResultsControllerDelegate {

    var fetchedResultsController: NSFetchedResultsController

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

    let entityName: NSString
    var delegate: KPCoreDataResultsDelegate?

    var predicate: NSPredicate {
        get {
            return fetchedResultsController.fetchRequest.predicate!
        }
        set {
            fetchedResultsController.fetchRequest.predicate = newValue            
            do {
                try fetchedResultsController.performFetch()
            } catch {
                print(error)
            }
        }
    }
    var sortDescriptor: NSSortDescriptor!
    var count: NSInteger {
        return (fetchedResultsController.sections!.first!).numberOfObjects
    }

    init(entityName: String, predicate: NSPredicate, sortDescriptor: NSSortDescriptor) {
        self.entityName = entityName
        let fetchRequest = NSFetchRequest(entityName: entityName)
        fetchRequest.predicate = predicate
        fetchRequest.sortDescriptors = [sortDescriptor]
        fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        super.init()
    }
}
在自定义Core Data Results Controller文件中,简化对CoreData内容的访问。当我从表视图
(numberOfRowsInSection)
调用results controller的count属性时,应用程序崩溃,说:

致命错误:在展开可选值时意外发现nil

以下是表视图代码:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return accountController.count
}
基本上,上面的代码给出了这个错误-我使用的是怎么了?或者这里发生了什么?

试试类似的方法

  return fetchedResultsController.sections![section].numberOfObjects

在获取任何数据(viewDidLoad之后)之前调用count,因此节和行为零。在swift中,您不能访问nil!如果你这样做,你会得到一个错误


您确实调用了setPredicate,但在设置fetchedResultController之前——因此不会发生performFetch;)


在init或viewDidLoad中执行
fetchedResultsController.performFetch()

是否可以发布整个codesection不是Results Controller对象中的任何位置的属性,只是在表视图本身中。通常xCode只使用第一个部分(始终有一个)啊,看,如果我说的是代码中的第一部分,我也这么认为……但是当我使用“po fetchedResultsController.sections”时,即使“po fetchedResultsController”不返回nil,也会返回nil。所以它仍然不起作用?嗯,如果你想看的话,我可以把我的github链接到我使用这个代码的地方?因为我很确定使用.count不是最好的方法,我总是使用sections。您可以尝试以下操作:返回fetchedResultsController.sections![1] .numberOfObjects自从您说您没有Section之后,我根本不明白这一点,这也不会有任何帮助,因为这不是问题所在;)