Question

I'm not very sure how Document-Based Applications works. I've created some actions for NSObject in the Mainmenu.xib. One of this is called when the user click on "File>new":

-(IBAction) newDocument:(id)sender{
    Document* newDoc =[[Document alloc] init];
    [[NSDocumentController sharedDocumentController]addDocument:newDoc];
    [newDoc addWindowController: [[NSWindowController alloc] initWithWindowNibName:[newDoc windowNibName] owner:newDoc]];
    [newDoc showWindows];
}

I've also this code inside the openDocument:(id) sender action that does the same but of course loading data to define the application workspace.

If I run the application it show a blank document without to call newDocument action. I don't know how to stop default blank document and to set newDocument: to be called. Then if i do openDocument: too (so I've two documents, one blank and one not) and I do some operation on the second document it also replicate in the first blank one. I've double check delegates, file owners, and also if the - (void)windowDidBecomeMain:(NSNotification *)notification return different pointers and all seem to be ok. Probably I've not understood document based application work flow but I've read the Apple guide and other istructions. What do I miss?

Was it helpful?

Solution 2

No. I thought to be confused instead the only problem was about releasing observer notification. When you call the close message for a NSDocument notification observers still persist. Working in ARC I miss this point. So This is the solution at my issue. Thank you anyway.

OTHER TIPS

An IBAction method is called, when the user did something. So this is not called from the system at app launch.

You can customize the behavior at app launch with -applicationShouldOpenUntitledFile: (NSApplicationDelegate) and – this is probably your next question – -applicationShouldHandleReopen:hasVisibleWindows: (NSApplicationDelegate). Changing the behavior in both cases is not recommended.

Looking to your action method, I see no reason, why you want to customize it.

A instance of your document class is created automatically.

You can create a window controller for it in your document subclass. This is documented.

Just let NSDocumentController do the work for you. What is the problem of the default behavior?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top