Ios NSFetchedResultsSwift中的控制器计数
我是一名来自Objective-C背景的Swift开发新手 我有以下代码: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
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之后,我根本不明白这一点,这也不会有任何帮助,因为这不是问题所在;)