0

xib와 nibs의 시대에 CoreData와 macOS를 다루기 시작한 지 꽤 오래되었습니다. xib에는 문서와 managedObjectContext에 대한 액세스 권한을 부여 할 수있는 "파일 소유자"가 있습니다. 쉬운.NSPersistentDocument, Swift, macOS 및 storyboards - managedObjectContext를 얻는 방법?

NSPersistentDocument와 스토리 보드를 사용하면 약간의 닭고기와 달걀 문제가 있습니다.

override func makeWindowControllers() { 
    // Returns the Storyboard that contains your Document window. 
    let storyboard = NSStoryboard(name: "Main", bundle: nil) 
    let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController // <- when I need the moc 
    self.addWindowController(windowController) 
    windowController.contentViewController!.representedObject = self // <- when I set the representedObject 
} 

이 애플을 포함한 많은 사람들이, 제안하는 어떤 것 같습니다 : NSPersistentDocument에서 서브 클래스 내 문서 클래스에서, 나는 다음 있습니다.

내 문제는 다음과 같습니다. MainViewController에서 ObjectController가 필요하며 managedObjectContext에 바인딩해야하지만 managedObjectContext가 필요할 때 self로 아직 representObject를 설정하지 않았습니다. 따라서 예외가 발생합니다. makeWindowControllers 메서드의 끝에서 representObject를 설정하는 것은 너무 늦었지만 어쨌든 이전에 가져올 수는 없습니다.

답변

0

오케이. 그래서. 어젯밤에 무슨 일이 일어 났는지는 모르겠지만이 일을 할 수있는 방법이 없었습니다.

오늘 아침, 나는 representedObject에 문서를 다시 읽어 :

representedObject 속성을 준수 관찰 키 - 값 코딩과 키 - 값입니다. 표현 된 객체를 파일의 nib 파일 소유자로 사용할 때, 표현 된 문자열로 시작하는 키 경로를 사용하여 파일의 소유자에 컨트롤을 바인딩 할 수 있습니다.

문서에서 마술이 representObject에 있음을 분명히 알 수 있습니다. 그래서 makeWindowControllers 메서드가 위와 같았고 내 스토리 보드에있는 내 Object Controller가 문서가 있어야한다고 말했습니다.

Don’t mind the (!)

나는 경로가 조금 가지고 (!) representedObject 그냥 AnyObject 때문에 놀라지 않았다.

나는 그 때 일을하지 않을 것을 완전히 기대하면서이 앱을 충실히 시작했다.

하지만 효과가있었습니다. 어제 이유가 무엇인지 모르겠지만 이미 잃어버린 시간에 대해 할 수있는 일은별로 없습니다.

후속 : 실험으로 어제부터 한 가지 실험을 시도했습니다. (!)을 제거하고 MOC에 편리한 참조를 가지고, 나는 MainViewController이 방법 추가 :

var moc:NSManagedObjectContext? { 
    if let doc = self.representedObject as? Document { 
     return doc.managedObjectContext 
    } 
    return nil 
} 

을 그리고 난 내 개체의 모델 키 경로로 "self.moc"를 사용 제어 장치. 이것은 작동하지 않았으며 익숙한 예외가 발생했습니다. 모델 키 경로를 "self.representedObject.managedObjectContext"로 복원하면 모든 것이 잘 동작합니다. ... 마술처럼.