On Dec 31, 2008, at 13:49, Richard Ashwell wrote:

1) I am/was creating my document class "programatically" like: (Note Typed in email, and in my project MyDocument is actually named something else)

MyDocument *newDoc = [[MyDocument alloc] init];
[newDoc importData:data];

Not so good. When creating or opening a document, there's more to do than just creating the NSDocument instance. openUntitledDocumentAndDisplay:error: is the way to go.

By itself this wouldn't pop up a document because of the overridden applicationShouldOpenUntitledFile: method

No, that had nothing to do with it. By creating the NSDocument instance directly, you simply weren't getting the document window shown.

So I added:

[newDoc makeWindowControllers];  and the method mentioned below.

Reading your notes carefully though it looks like I maybe should be using openUntitledDocumentAndDisplay:error instead of the makeWindowController thing that got my document to popup perhaps only because I added the showWindow:self to the end of that method.

Exactly.

And you are probably right that I am getting two instantiations, but only "seeing" one.

I will test your suggestion first, though It might take me a few because the template doesn't generate a NSDocumentController, only the NSPersistentDocument class itself so I first have to figure out how to add the Controller to my AppController class and stuff without breaking everything, I should be able to get openUntitledDocumentAndDisplay:error to work (I bet it does, so here is a pre thank you!!!),

No need to stress! NSDocumentController is a singleton object that every AppKit application gets for free. So instead of:

        MyDocument *newDoc = [[MyDocument alloc] init];

just write this:

        NSError *error;
MyDocument *newDoc = [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay: YES error: &error];
        if (!newDoc)
                ... // report the problem described in 'error'

... I pulled out the extra call to makeWindowControllers and traced, When the document gets create via the New menu item the makeWindowControllers gets called automatically like you described, but just instantiating the document with MyDocument *newDoc = [[MyDocument alloc] init]; doesn't call makeWindowControllers. Perhaps that is what the NSDocumentController is supposed to do for me?

Yup. It also causes the document to appear on the Window menu for you, and populates the Open Recent menu.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to