Прошло много времени с тех пор, как я занимался CoreData и macOS, еще во времена xib и nibs. С xib есть «Владелец файла», который может предоставить вам доступ к вашему документу и управляемому ObjectContext. Легкий.
С NSPersistentDocument и моей раскадровкой у меня возникла небольшая проблема с курицей и яйцом. В моем классе Document, подклассе 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
}
Кажется, это то, что предлагают многие люди, включая Apple.
Моя проблема заключается в следующем: в MainViewController я хочу иметь Object Controller, и он должен быть привязан к manageObjectContext, но когда ему нужно иметь manageObjectContext, я еще не установил для представленного объекта значение self. Поэтому выбрасывается исключение. Задавать представляемый объект в конце метода makeWindowControllers слишком поздно, но я все равно не вижу возможности сделать это раньше.