I wanna use fetchedResultsController
in my code with Swift3. I tried this way and other ways, but I can't make it. Here is my code(it doesn't work):
var fetchedResultsController: NSFetchedResultsController<Entity> {
let fetchRequest: NSFetchRequest<Entity>
if #available(iOS 10.0, *) {
fetchRequest = Entity.fetchRequest()
} else {
// Fallback on earlier versions
fetchRequest = NSFetchRequest(entityName: "Entity")
}
fetchRequest.fetchBatchSize = 20
let orderDescriptor = NSSortDescriptor(key: "archiveOrder", ascending: true)
let nameDesctiptor = NSSortDescriptor(key: "entityName", ascending: false)
fetchRequest.sortDescriptors = [orderDescriptor, nameDesctiptor]
let aFetchedResultsController: NSFetchedResultsController<Entity> = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: appDelegate.managedObjectContext, sectionNameKeyPath: nil, cacheName: "Master")
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController
do {
try _FetchedResultsController.performFetch()
} catch {
let nserror = error as NSError
print("Unresolved error \(nserror), \(nserror.userInfo)")
}
return _FetchedResultsController!
}
Could you please give me any advice or suggestions?
Basically Apple recommends to declare NSFetchedResultsController
as non-optional lazy initialized property using a closure which runs the code in the closure only once.
lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = { ... }()
Your code doesn't compile because Swift code is case sensitive that means _fetchedResultsController
and _FetchedResultsController
are two different things.
The rest of the code seems to be correct.
lazy var fetchedResultsController: NSFetchedResultsController<Entity> = {
let fetchRequest: NSFetchRequest<Entity>
if #available(iOS 10.0, *) {
fetchRequest = Entity.fetchRequest()
} else {
// Fallback on earlier versions
fetchRequest = NSFetchRequest(entityName: "Entity")
}
fetchRequest.fetchBatchSize = 20
let orderDescriptor = NSSortDescriptor(key: "archiveOrder", ascending: true)
let nameDesctiptor = NSSortDescriptor(key: "entityName", ascending: false)
fetchRequest.sortDescriptors = [orderDescriptor, nameDesctiptor]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: appDelegate.managedObjectContext,
sectionNameKeyPath: nil,
cacheName: "Master")
aFetchedResultsController.delegate = self
do {
try aFetchedResultsController.performFetch()
} catch {
let nserror = error as NSError
print("Unresolved error \(nserror), \(nserror.userInfo)")
}
return aFetchedResultsController
}()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.