我是来自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 回答
尝试类似的东西
在获取任何数据(在viewDidLoad之后)之前调用count,因此section和rows为nil . 在swift中,您可能无法访问nil!如果你这样做,你会收到一个错误
你调用setPredicate但是在设置fetchedResultController之前 - 所以performFetch没有发生;)
做
fetchedResultsController.performFetch() in init or viewDidLoad