Re: NSPersistent Document but probably a Bindings Noobie Cry for Help
Re: NSPersistent Document but probably a Bindings Noobie Cry for Help
- Subject: Re: NSPersistent Document but probably a Bindings Noobie Cry for Help
- From: Richard Ashwell <email@hidden>
- Date: Wed, 31 Dec 2008 16:09:38 -0600
More details:
Ok I, I think I have a lot to learn before I can call
[NSDocumentController openUntitledDocumentAndDisplay:error], in the
mean time 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?
Richard
On Dec 31, 2008, at 3:49 PM, Richard Ashwell wrote:
Quincy thanks for your reply, ok I was going to start sending you
tons of little snipits from my code, and I had the whole email,
typed but decided to reread your comments carefully.
In a nutshell:
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];
By itself this wouldn't pop up a document because of the overridden
applicationShouldOpenUntitledFile: method
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.
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!!!),
If not I think perhaps I should first deconstruct into a separate
clean project so that I can share better examples.
Regards,
Richard
On Dec 31, 2008, at 2:42 PM, Quincey Morris wrote:
On Dec 31, 2008, at 11:58, Richard Ashwell wrote:
4) The next task was based on a selection in the database table, I
wanted to programatically open a document and pre populate it from
the data.
It's not clear what you mean by "programmatically open a document".
Are you invoking the same action method that the Open menu item
uses? Telling the NSDocumentController to open a document? Trying
to use [[NSDocument alloc] init...]?
It also sounds like perhaps this programmatic "open" actually has
the semantics of "new". That is, you're creating a new (untitled)
document with some data from your database, which is (eventually)
going to get saved in a file separate from your database. If so,
calling this "open" is going to confuse us.
Here I ran into the issue that the document from the template was
tied to Nib via the Overridden windowNibName: method, which made
it difficult to programmatically get the Controller Window when
creating a new document from elsewhere in the code. The solution
I have here is to comment out the windowNibName method and instead
implement:
- (void)makeWindowControllers
{
NSWindowController *mainWindowController = [[NSWindowController
alloc] initWithWindowNibName:@"MyDocument" owner:self];
[mainWindowController setShouldCloseDocument:YES];
[self addWindowController:mainWindowController];
[mainWindowController showWindow:self];
}
It's not clear how this makes it easier to "get the Controller
Window", since the reference to the controller is local to this
method. Anyway, once the controller is created, you can always get
it as [[document windowControllers] objectAtIndex: 0].
This worked and I could instantiate an instance of my Document
Class programatically when ever I want and call method
makeWindowControllers on it and the document would come up, more
importantly I could then setup the instantiated Document to have
its data loaded.
If you really are invoking makeWindowControllers yourself, you
probably shouldn't be, since it's normally invoked automatically.
Invoking your implementation manually would create a second window
controller, which isn't what you want.
To create a new document programmatically, you should probably be
invoking [NSDocumentController
openUntitledDocumentAndDisplay:error:]. Are you using something else?
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden