Re: Calling maincontroller
Re: Calling maincontroller
- Subject: Re: Calling maincontroller
- From: Quincey Morris <email@hidden>
- Date: Thu, 7 Oct 2010 13:13:26 -0700
On Oct 7, 2010, at 11:58, Hans van der Meer wrote:
> In my application I instantiate a MainController (the delegate having "awakeFromNib) from where all actions are dispatched. In order to send messages to the displaywindow residing in MainController, there is the problem how to find this MainController from other callers (possibly on other threads). Now it is coded as follows:
>
> In MainController.c:
> static MainController *controller = nil;
> controller = self; /* in its init method */
> + (void) message:(NSString *)msg;
> { dispatch_async(dispatch_get_main_queue(), ^{[controller message:msg];});}
> - (void) message:(NSString *)msg;
>
> I am not very happy with the static variable but do not see another way to accomplish this. I fear my solution is not as much in the spirit of Cocoa programming as it should be.
> Is there a better way?
Is MainController your application delegate, or is it a window controller? (It could be both at the same time, too.)
If it's your application delegate, other objects can find it as [NSApp delegate] or [[NSApplication sharedAppplication] delegate].
If it's just a window controller, add a "mainWindowController" property to your application delegate, and refer to it as [[NSApp delegate] mainWindowController].
OTOH, a singleton pattern as you've sort of done already *is* a valid solution.
However, it's often the case with questions like yours that the difficulty is really a conceptual design issue, and that you might be torturing the frameworks classes or the MVC design paradigm. (Passing a pointer to a window controller seems unlikely for a dispatched Block, for example.)
_______________________________________________
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