Further to my last message, when I said my app crashed if I tried to hand-code 
the action of an NSMenuItem… I think I know why. I did it right, but my class 
doesn't subclass NSObject and thus, according to what I found, my method names 
couldn't be found as selectors. Of course, then, the app choked.
http://www.apeth.com/swiftBook/apa.html#_selectors 
<http://www.apeth.com/swiftBook/apa.html#_selectors>
See the final section, where the author points out how a call can fail even 
though the class, method names, and selectors are all correct; I believe that's 
what happened to me. Thanks again for all the help and advice everyone.
> On Sep 2, 2015, at 5:46 PM, Ken Thomases <[email protected]> wrote:
> 
> On Sep 2, 2015, at 4:19 PM, Alex Hall <[email protected]> wrote:
> 
>> Regarding connection to First Responder, I think I'm still missing a step. I 
>> have a menu item I want to connect to First Responder so that, as I 
>> understand it, I can then make an outlet and action for that item in my view 
>> controller (stop me if I'm wrong there).
> 
> You won't be able to have an outlet of the view controller connect to the 
> menu item.  Connecting the menu item's action to First Responder doesn't 
> change that.  It just allows the menu item to invoke the action on the view 
> controller through the indirect mechanism of the first responder and the 
> responder chain originating there.  (But only if the view controller is in 
> that responder chain due to its view or a subview having focus.)
> 
>> Here's what I did:
>> 
>> * select the menu item in the storyboard's outline table
>> * go to the Connections Inspector and find the "Sent Actions"
>> * There's a button in there that VO identifies as "connection action, AX 
>> button". I locked the mouse down on that.
>> * I went back to my outline, located First Responder in my application 
>> scene, put VO on the unlabeled button on to its right, and released the 
>> mouse. A connection appeared in the Connections Inspector for First 
>> Responder, so that seems to have worked.
>> * Note: a new window appeared, with a massive list of actions, from 
>> "superscript" to "cut" to "spellcheck", and tons more. VO read a few 
>> unlabeled buttons in here, but mostly it just found objects that were 
>> "unknown". Enter did nothing, so I eventually had to press escape. I still 
>> don't know what that window was for or if I was supposed to do something 
>> with it.
> 
> Connecting the menu item's action actually needs to set two pieces.  First is 
> the target.  You've successfully chosen the First Responder placeholder.  (As 
> previously discussed, this actually results in the menu item having nil for 
> its target which is what you want.)  The second piece is which action method 
> it should invoke.  That second window is a menu to allow you to select the 
> action method.  First Responder lists all known action methods of all known 
> responder classes because any responder could be in the responder chain.  
> That's why the list is so long.  The menu supports type-to-select, although 
> it doesn't quite work like I'm used to.
> 
> If you didn't successfully select something from that menu, then either the 
> action connection wasn't made or it was made to some arbitrary action method.
> 
>> * If I'm following yesterday's discussion, I should now be able to make an 
>> IBOutlet in my view controller for the menu item, since said menu item is 
>> now hooked to First Responder.
> 
> Nope.
> 
>> When I did, it refused to connect.
> 
> Right.
> 
>> * In case I misunderstood, and I have to keep the outlet in AppDelegate but 
>> can put just the action anywhere, I connected the menu item to an outlet in 
>> AppDelegate and then tried dragging from the "new action AX button" in the 
>> menu item's Connections Inspector to my IBAction method, in the view 
>> controller. Unfortunately, the mouse simply refused to route to the button I 
>> needed to drag, yet it routed to any other connection button I tried.
> 
> First, do you actually need an outlet to the menu item?  What do you plan to 
> do with that?  It's not required to get the menu item working.  It might be 
> useful if you wanted to do run-time manipulation of the menu item, but there 
> are also other (likely better) ways of doing that, like menu validation.  
> That would keep the manipulation inside the class that implements the action 
> method.
> 
> If you really do need an outlet, it has to be from the app delegate.  It 
> sounds like you were able to make that connection.  Connecting the menu 
> item's action is unrelated.  You described earlier doing that successfully, 
> too, although there's some doubt about whether you were able to select the 
> correct action method.
> 
> Something to consider if Xcode's interface is just not accessible enough 
> (after filing a bug!) would be to connect an outlet from the app delegate and 
> then have the app delegate set the item's target and action in code, such as 
> in the -applicationDidFinishLaunching: method.  The code would reference the 
> menu item via the outlet.  So, it would be something like:
> 
>    self.myMenuItem.target = nil;
>    self.myMenuItem.action = @selector(myActionMethod:);
> 
> Regards,
> Ken
> 


--
Have a great day,
Alex Hall
[email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/xcode-users/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to