2017-12-14 13 views
0

コントローラを初期化するときに汎用フェッチ結果コントローラを設定しようとすると、Cannot convert value of type 'NSFetchRequest<T>' to expected argument type 'NSFetchRequest<_>', Insert ' as! NSFetchRequest<_>が返されます。ジェネリックNSFetchRequest汎用NSFetchRequestでエラーが発生する

fileprivate var fetchedResultsController: NSFetchedResultsController<T>! 

    guard let request: NSFetchRequest<T> = T.fetchRequest() as? NSFetchRequest<T> else { 
     assertionFailure("Can't set up NSFetchRequest") 
     return 
    } 
    request.sortDescriptors = [NSSortDescriptor(key: key, ascending: ascending)] 
    fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: dataStore.viewContext, sectionNameKeyPath: nil, cacheName: nil) 
    do { 
     try fetchedResultsController.performFetch() 
    } catch let error { 
     DDLogError("Error fetching entities: \(error)") 
    } 

ここで何が起こっているのですか? FRC用

答えて

1

あなたは明示的に型T

を持っていることを指定する必要があります。また、そこにあなたのコードスニペットからのコンテキストのに十分ではありませんので、それはあなたがこのクラスを定義したのかは不明です。しかし、ここに私はそれがどのように見えるかと考えています:

import CoreData 
class Model<T> where T: NSManagedObject { 

    fileprivate var context: NSManagedObjectContext! // assume that somewhere during initialization we setting context 

    fileprivate lazy var fetchedResultscontroller: NSFetchedResultsController<T> = { [weak self] in 
     guard let this = self else { 
      fatalError("lazy property has been called after object has been descructed") 
     } 
     guard let request = T.fetchRequest() as? NSFetchRequest<T> else { 
      fatalError("Can't set up NSFetchRequest") 
     } 

     request.sortDescriptors = [NSSortDescriptor(key: "key", ascending: true)] 
     let tmp = NSFetchedResultsController<T>(fetchRequest: request, managedObjectContext: this.context, sectionNameKeyPath: nil, cacheName: nil) 
     return tmp 
    }() 
} 
関連する問題