On May 9, 2012, at 02:45 , ecir hana wrote:

> I apologize but I still don't quite understand. If I just
> implement saveDocument: at the document and leave document controller
> without it, the menu item is still disabled. When I add saveDocument: to
> the controller as well, it works. I mean, if I try to visualize it, if I
> just alloc:init: a document it just floats there in memory, how would a
> menu know about it? So I need to create it via the document controller, no?
> If this is the case, how to propagate the saveDocument: event though
> the document controller to the document?

It's hard to know what you're asking, because you're either using the wrong 
terminology, or you're trying to do something very strange.

NSDocumentController is a frameworks object -- a singleton -- that provides 
shared behavior relating to all documents (such as maintaining the "Recent 
Documents" menu). Except perhaps in some extreme conditions, you wouldn't write 
your own. Very occasionally, it's necessary to subclass the 
NSDocumentController and force the singleton to your own subclass, but this is 
rare.

NSDocument -- well, your subclass of it -- is a *controller* object (in the MVC 
sense) that represents your document file and the windows used to edit it.

The NSDocumentController and your NSDocument-subclass instances are both in the 
responder chain. (There's a different responder chain running through each 
document object.) For information, see:

        
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW9

and study the pictures under the heading "Responder Chain for Action Messages" 
-- especially figure 1-10 for document-based apps.

Thus, for example, the 'saveDocument:' action will be normally be delivered to 
the NSDocument-subclass object directly, because it is in the responder chain 
that's active when the menu item is chosen. Note that NSDocument *has* a 
'saveDocument:' method; NSDocumentController doesn't.

The document architecture is described in great detail here:

        
https://developer.apple.com/library/mac/#documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/Introduction/Introduction.html

You're absolutely wasting your time if you're trying to write Cocoa apps 
without understanding the event architecture (first reference, above). You're 
absolutely wasting your time if you're trying to write a document-based app 
without understanding document architecture (second reference).


_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to