Re: NSMenu setTarget method causes intermittent crashes?

Christiaan Hofman <[email protected]>
Newsgroups gmane.comp.macosx.devel
Message-ID <[email protected]>
On Sep 15, 2009, at 4:14, Duncan Champney wrote:

>
> On Sep 14, 2009, at 7:15 PM, Greg Titus wrote:
>
>>
>> On Sep 14, 2009, at 4:09 PM, Duncan Champney wrote:
>>
>>>     [a_menu_item setView: self];
>>
>>
>> Duncan,
>>
>> I believe the above line of code is the trouble. The -setView:  
>> method on NSMenuItem is for placing a custom view _inside_ the menu  
>> item, and has nothing to do with the target. (See the NSMenuItem  
>> documentation.) Frankly, I'm surprised you aren't running into  
>> trouble long before the garbage collector does anything if you are  
>> setting this to a view which is already in the visible view  
>> hierarchy of your app's windows.
>>
>> Hope this helps,
>>  - Greg
>
>
> Greg,
>
> I didn't explain that as clearly as I should have.
>
> The way we create our objects is a little unusual. The view object  
> creates the menu, and the menu object creates the menu item object  
> and calls the menu item's setView and setTarget methods. The view  
> object doesn't exist in the view hierarchy except as the view of the  
> menu item.
>
> So even though our code creates the objects in an unusual order the  
> way they are presented to the system is correct.
>
> The reason we do this is that our popup menu only contains one  
> NSMenuItem. That menu item contains a custom view that draws a grid  
> of objects in rows and columns. Those objects act like menu items,  
> but they are really one single menu item. That lets us support a  
> grid of objects rather than a single column of menu items.
>
> In our code the custom view is the object that contains the special  
> behavior. We have a general popup view class that has the code to  
> create the popup menu, add an item, and attach itself to the menu  
> item as the view object. Each subclass of view object implements the  
> special behavior for that type of popup. That way we only have to  
> subclass one object (the view) in order to create a new kind of  
> popup menu.
>
>
> Duncan Champney
> WareTo

I really can't think of any reason why you'd want such a convoluted  
circular ownership cycle. My advice would be to make the ownership  
graph a tree without cycles. Who's owning the view? Why doesn't it  
just own the menu? Why do you even set the target of the menu item, as  
that's not functional with a view anyway?

Christiaan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.