문제

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?

도움이 되었습니까?

해결책 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.

다른 팁

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?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top