このコードは、現在UIViewController
に座っ:リファクタリングNSFetchedResultsController
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
。
コードを再構築する正しい方法は何ですか?
新しいクラスを作成しますか?
NSFetchedResultsControllerDelegate
をどうすれば処理できますか?fetchedResults
を参照するすべての数字は、 サブクラスNSFetchResultsControllerDelegate
である必要がありますか?
ありがとうございます! – bumber
今、私のView ControllerはNSFetchedControllerDelegateを採用しており、delegateの関数はViewControllerで宣言されたtableViewを参照しています。だから、私はすべきことは、デリゲートの新しいクラスを作成し、デリゲート内でtableview変数を作成し、その後、FRCのデリゲートを設定した後、デリゲート内の変数をtableviewをポイントするように設定します。 – bumber
あなたがViewController2で参照する必要があるときに新しいDataControllerインスタンスを作成しないようにsharedInstanceを作成することをお勧めしますか? – bumber