首页 文章

NSFetchedResultsController计数在Swift中

提问于
浏览
2

我是来自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) 调用结果控制器的count属性时,应用程序崩溃说:

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

这是表视图代码:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return accountController.count
}

基本上,上面的代码给出了这个错误 - 我使用了!错了吗?或者这里发生了什么?

2 回答

  • 0

    尝试类似的东西

    return fetchedResultsController.sections![section].numberOfObjects
    
  • 0

    在获取任何数据(在viewDidLoad之后)之前调用count,因此section和rows为nil . 在swift中,您可能无法访问nil!如果你这样做,你会收到一个错误


    你调用setPredicate但是在设置fetchedResultController之前 - 所以performFetch没有发生;)

    fetchedResultsController.performFetch() in init or viewDidLoad

相关问题