I have an application with a shelf view that has a bunch of subviews
(icons representing applications). In windowDidBecomeKey: I reload the
shelf, meaning that I do removeFromSuperviewWithoutNeedingDisplay for
all these subviews and then rebuild the shelf (recreate all the
subviews). Doubleclicking on one of these subviews launches or
activates the represented application.
From time to time I get a core dump when doubleclicking from one app
to the next on the shelf. By backtracing I found out that
[NSWindow makeFirstResponder:];
is called with a previoulsy removed (and released) view (one of the
views that have been recreated earlier in windowDidBecomeKey:). Here
is a pseudo backtrace of this
[NSWindow makeFistResponder:] <--------
[NSWindow sendEvent:];
[NSApplication sendEvent:]
[NSApplication run]
I realized some code in [NSView removeSubview:] that is obviously
meant to remove the to be removed view from the view hierachy, but it
is nevertheless referenced and used by an event coming in after its
removal.