2017-12-14 15 views
0

일반 가져온 결과 컨트롤러를 설정할 때 컨트롤러를 초기화 할 때 Cannot convert value of type 'NSFetchRequest<T>' to expected argument type 'NSFetchRequest<_>', Insert ' as! NSFetchRequest<_>이 표시됩니다.일반 NSFetchRequest를 사용하는 일반 NSFetchedResultsController에서 오류가 발생합니다.

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)") 
    } 

여기에 무슨 일이 일어나는 지 아는 사람이 있습니까?

답변

1

FRC를 들어 명시 적으로 또한, 귀하의 코드에서 컨텍스트의 충분하지가 타입 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 
    }() 
}