On Sep 12, 2008, at 3:07 PM, Brad Gibbs wrote:

Thanks for the help. I'm trying to understand your code suggestion below. My app isn't document-based, so I don't think I have a document to refer to... Can I just leave that part out, or will things work differently in a non-document-based app?

Ah. That was just an example that I figured would be close enough to lead you to the solution that was right for your App. You'll need to replace the "windowController] document] mainWindowController]" part with whatever series of messages allow you to get a reference back to your main view controller.

As for deciding what the right chain of messages is ... At some point your view controller probably knows about some object, that knows some other object, that knows another object ... that finally knows your main window controller. If there isn't some chain of relationships you can follow through your objects to get from your view controller to your window controller, you could introduce one. Once you've done that, you'll use that path to get from self, the view controller, to your main window controller.

I've also re CC'd the list because I think this thread will be interesting to new cocoa developers searching through the list history for help -
Jon Hess



The bit I wrote about the responder chain was in response to Jamie Hardt's suggestion that I use the responder chain (which I couldn't get to work, either).


On Sep 12, 2008, at 2:43 PM, Jonathan Hess wrote:


On Sep 12, 2008, at 2:25 PM, Brad Gibbs wrote:

If I'm reading your mail correctly, I've tried that without success.

I have a MainWindowController controlling MainWindow. On MainWindow.xib is a button which launches another window (MainMenu,xib) with a window controller (MainMenuWindowController.m). A couple of NSViewControllers down is a view with the buttons in question.

I've tried creating an instance of MainWindowController in that view's NSViewController (declaring MainWindowController *iMainWindowController in the interface, using @property and @synthesize and then calling iMainWindowController = [[MainWindowController alloc] init] in the NSViewController's implementation section).

The problem is that this creates a new 'MainWindowController'. The object you get in response to [[MainWindowController alloc] init] is unrelated to the one previously created.


I can tell the method is being called by an NSLog statement posted to the Console, but the view doesn't swap in. I'm assuming this is because I've programmatically created another instance of the MainWindowController class in the NSViewController and I'm targeting that instance with the buttons, rather than the instance created at launch, which is controlling the MainWindow.

Exactly.

Calling a method on the MainWindowController instance created by the NSViewController would still cause the log file to print the message without swapping in the view on the instance of the Main Window created when I launch the app. So, I'm left to assume that I need to target the instance created at launch.

Yep.


According to the Event Handling Guide:
If an NSWindowController object is managing the window, it becomes the final next responder.

Is this going to be a problem, since the NSViewController with the button code is underneath its own NSWindowController? Would the responder chain just stop there and so that messages wouldn't make their way over and up to the MainWindowController?

The method I suggested is independent of the responder chain. So this won't come into play. If you follow the other suggestion, this will be relevant.

If you choose to peruse my suggestion further, you'll need to make a way to find the original MainWindowController from the code inside of your view controller. If your document is holding onto a reference to the main window controller, perhaps your view controller can do something like '[[[[self window] windowController] document] mainWindowController]'.

Good Luck -
Jon Hess


Thanks again.

Brad


On Sep 12, 2008, at 1:38 PM, Jonathan Hess wrote:

Hey Brad -

So it sounds like you have two controllers, A, and B, and they each have their own NIB. Sound like you're on the right track. Now you want to have an action in B's NIB affect controller A. Does controller B have an instance variable, or other mechanism, for referencing controller A? If so, you could put an action method on controller B and have that be the target of your button in NIB B. The implementation of that action can then call a method on controller A.

Jon Hess


On Sep 12, 2008, at 12:17 PM, Brad Gibbs wrote:

I'm working on an application with a single main window and a number of views and view controllers. I have a navigation window that pops up and allows users to set preferences and also switch views in the main portion of the app's main window.

I want to write the code to switch views in the MainWindowController.m, since it controls the window that contains the views that will be switched. But, the buttons that control the view switching are located on a panel being controlled by a different view controller.

The main window and its window controller are instantiated when the program is launched. Creating another instance in the view controller that contains the buttons (either by adding a MainWindowController object in IB or by creating another instance in the view controller code) doesn't target the existing main window, and, therefore, doesn't cause views to be switched in the main window that is instantiated on launch. So, how can I target the instance of the main window controller that was instantiated on launch from the NSViewController controlling the view with the view switching buttons, in order to switch views? Or should I be doing something else entirely?


Thanks.

Brad
_______________________________________________

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/jhess%40apple.com

This email sent to [EMAIL PROTECTED]





_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to