这段代码现在位于UIViewController中
lazy var categoryFRC: NSFetchedResultsController<Category> = {
let fetchRequest: NSFetchRequest<Category> = Category.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "text", ascending: true)]
let appDelegate = (UIApplication.shared.delegate) as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
frc.delegate = self
do {
try frc.performFetch()
} catch {
fatalError("Failed to initialize FetchedResultsController: \(error)")
}
return frc
}()这就是我使用for-循环引用获取类别的方式:
let category = (self.categoryFRC.fetchedObjects?[index])! as Category我想从不同的CoreData访问同一个ViewController实体。
NSFetchedResultsControllerDelegatefetchedResults的所有fetchedResults必须是NSFetchResultsControllerDelegate的子类吗?发布于 2017-02-01 09:54:09
我所做的是从ViewControllers中提取所有非视图呈现/用户事件处理,并将该逻辑放入另一个类中。在您的示例中,您希望创建一个新类并将categoryFRC逻辑放入新类中。
class DataController {
lazy var categoryFRC: NSFetchedResultsController<Category> = {
let fetchRequest: NSFetchRequest<Category> = Category.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "text", ascending: true)]
let appDelegate = (UIApplication.shared.delegate) as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
frc.delegate = self
do {
try frc.performFetch()
} catch {
fatalError("Failed to initialize FetchedResultsController: \(error)")
}
return frc
}()
}然后,在ViewController存储中,DataController的一个实例:
class ViewController {
var dataController : DataController!
func viewDidLoad() {
dataController = DataController()
dataController.categoryFRC.delegate = <Class that adopts NSFetchedResultsControllerDelegate>
}
}其他意见:
https://stackoverflow.com/questions/41970893
复制相似问题