Override -openDocumentWithContentsOfURL: 1. If you've already got a document open, send -canCloseDocument… to the open document, supplying the callback info
2. Either: A) Return nil and an NSUserCancelled error. B) Return the existing document. 3. When you get the callback from -canCloseDocument… call super's implementation of -openDocumentWithContentsOfURL: On 5 Jan 2010, at 16:45, Martin Stanley wrote: > I have a Core-Date application that uses the Cocoa Document architecture > (NSPersistentDocument) and would like to ensure that the user only can have 1 > document open at a time. Think of this application as similar to Mail.app or > Addressbook.app, etc. except that I would like the user to be able to open > different persistent stores at will, just not simultaneously. > > (As an aside, the reason for this is because my document has many related > windows and I think it would be confusing for the user. It would not be > obvious which auxiliary window relates to which document. I may fix this in > the future by using the concept of Inspectors, but at this point I'm not sure > if this is the correct model.) > > I searched extensively and came up with the recommendation that I subclass > NSDocumentController and override: > - (id)openDocumentWithContentsOfURL:display:error: > This was recommended over simply trapping the open menu item(s). > > > This seemed very promising until I ran into a stumbling block. In > openDocumentWithContentsOfURL:display:error: I check to see if there is an > already open document and if so call: > canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo: > with an appropriate delegate and selector. The problem is that this returns > immediately, even in the case when the document is dirty and it presents a > modal dialog to the user. Because of this, the 2nd document is opened before > I have a chance to deal with the first one. > > All of this is making me wonder if I'm taking the wrong approach. > > Should I figure out a way to prevent the 2nd document from opening before the > first one is either saved or abandoned: (override > canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo: in my > NSPersistentDocument subclass)? This feels like the solution is getting > uglier by the minute. > > Or is there a much easier way to accomplish what I want to do? Or should I be > looking at a entirely different approach for my application? > > Thanks, > Martin > > _______________________________________________ > > 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/cocoadev%40mikeabdullah.net > > This email sent to cocoa...@mikeabdullah.net _______________________________________________ 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