0

UIViewController 하위 클래스는 MyViewController이며 NSFetchedResultsControllerNSManagedObjectContext입니다. 하지만 NSFetchedResultsController을 만들 때 MyViewController에 managedObjectContext 속성이 없다고합니다.명확하게 나타낼 때 내 클래스에 NSManagedObject 속성이 없다는 오류가 발생하는 이유는 무엇입니까?

var managedObjectContext: NSManagedObjectContext! 
var fetchedResultsController: NSFetchedResultsController = { 
    let fetchRequest = NSFetchRequest() 
    let entity = NSEntityDescription.entityForName("Post", inManagedObjectContext: self.managedObjectContext) 
    fetchRequest.entity = entity 
    fetchRequest.fetchBatchSize = 50 
}() 

바로 전에 managedObjectContext 변수를 선언하지 않았습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

당신이 게으른 계산 속성으로 선언 하지 않는 한 같은 클래스에서 다른 속성을 참조 할 수없는 속성의 초기화.

또한 클로저에서 가져온 결과 컨트롤러를 반환하는 것을 잊어 버렸습니다.

var managedObjectContext: NSManagedObjectContext! 
lazy var fetchedResultsController: NSFetchedResultsController = { 
    let fetchRequest = NSFetchRequest() 
    let entity = NSEntityDescription.entityForName("Post", inManagedObjectContext: self.managedObjectContext) 
    fetchRequest.entity = entity 
    fetchRequest.fetchBatchSize = 50 
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 
    return fetchedResultsController 
    }() 
+0

여기서 게으른 변수 차이는 근본적으로 어떤 영향을 미칩니 까? –

+0

@DougSmith : 지연 인스턴스 변수는 클래스 인스턴스가 생성 될 때가 아니라 최초 액세스시 초기화됩니다. 그러나 잘 작동하고 기본 Xcode 템플릿으로 생성 된 핵심 데이터 앱은 동일한 패턴을 사용합니다. –