2016-10-02 2 views
3

방금 ​​Swift 3으로 프로젝트를 마이그레이션했고 지연된 NSFetchResultController에 대한 오류가 발생했습니다.지연된 변수 NSFetchedResultsController가 Swift 3.0에서 오류를 생성했습니다.

enter image description here

아래와 같이이 방법은 스위프트 3에서 더 이상 가능

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

내 현재 코드 그것은이 오류를 생산

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

큰 이점은 fetch, insert

+0

을 사용하여 모든 유형 캐스트를 제거합니다. 고맙습니다. 당신이 대답 할 필요가없는 쪽지에. NSManagedObject를 subsclassing에 대한 좋은 문서가 있습니까? – Allreadyhome

+0

실제로 가장 포괄적 인 문서는 Apple 설명서입니다. – vadian

+0

@vadian 항상'lazy'로 초기화해야합니까? 동일한보기 컨트롤러에서 가져 오기 요청의 키 경로를 변경하려고한다고 가정 해 보겠습니다. – Adrian

관련 문제