2016-10-02 9 views
3

私のプロジェクトをSwift 3に移行したばかりで、遅延インスタンス化されたNSFetchResultControllerのエラーが発生しました。lazy var NSFetchedResultsControllerがSwift 3.0でエラーを生成しています

enter image description here

下に示すように、この方法は、スウィフト3の下にもはや可能で

https://www.andrewcbancroft.com/2015/03/05/displaying-data-with-nsfetchedresultscontroller-and-swift/

私の現在のコードこれは、2つのエラーを生成

lazy var fetchedResultsController: NSFetchedResultsController = { 

    let primarySortDescriptor = NSSortDescriptor(key: "company", ascending: true) 
    let sortDescriptors = [primarySortDescriptor] 

    self.fetchRequest.sortDescriptors = sortDescriptors 

    let frc = NSFetchedResultsController(
     fetchRequest: self.fetchRequest, 
     managedObjectContext: self.managedObjectContext!, 
     sectionNameKeyPath: nil, 
     cacheName: nil) 

    frc.delegate = self 

    return frc 
}() 

:私はここに、このメソッドを使用します? Xcodeの提案通りに() -> <<error type>> inを追加しようとしましたが、正しい結果が得られませんでした。

答えて

10

提案された() -> <<error type>>は誤解を招きます。

スウィフト3 NSFetchedResultsControllerはジェネリックタイプになっています。 あなたはそれを初期化する必要があります。

lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = { 
... 
}() 

などNSFetchRequest

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity") 

あなたがNSManagedObjectのサブクラスを使用している場合は - をお勧めします - あなたはより多くのもののために、サブクラスタイプを使用することができます具体的

lazy var fetchedResultsController: NSFetchedResultsController<MyEntity> = { 
.... 
let fetchRequest = NSFetchRequest<MyEntity>(entityName: "MyEntity") 

fetchinsertなど

+0

パーフェクトを使用してすべてのタイプキャストを取り除きます。ありがとうございました。あなたが答える必要がないことに注意してください。 NSManagedObjectのサブスクリプションに関する良い文書はありますか? – Allreadyhome

+0

実際、最も包括的なドキュメントはAppleのドキュメントです。 – vadian

+0

@vadianそれは常に 'lazy'として初期化されなければなりませんか?フェッチ要求のキーパスを同じビューコントローラで変更したいとします。 – Adrian

関連する問題