I am currently fighting with NSDocument in a document based Storyboard based Cocoa Application (Objective C). Can anybody tell me how i can access the document in the NSViewCon
I know the original question was for Objective-C, but for others using Swift, protocols can help. The basic concept can be applied in Objective-C as well.
Instead of reaching back to the window controller, you could use dependency injection:
1) Create a document
property on your window controller and any view controllers that need to access the document (or utilize the representedObject
property that already exists). To make this easier, you could use a protocol to define the document property or to cast the representedObject
property to your document type if you go that route. Make all the view controllers that need to access the document adopt this protocol.
protocol DocumentAccessing {
var document: MyDocument? { get set } // could also use an implicitly unwrapped optional if the document is required to be set for the app to function
}
2) In the makeWindowControllers()
method of your document subclass, after creating your window controller, set its document property to self (as this is the document).
- (void)makeWindowControllers {
MyWindowController *windowController = MyWindowController()
windowController.document = self;
[self addWindowController:windowController];
}
3) Inside your window controller subclass, after you instantiate your view controllers, set the document property of the view controller to the window controller's document property.
4) Now by the time your view controller is loaded, it's document property should be populated.