UIButton "normal" que causa obj_stack_overflow o EXC_BAD_ACCESS excepción
Seguro que parece bastante inocuo. En mi aplicación delegado, comprueboNSUserDefaults para una bandera para mostrar consejos al inicio. Si está configurado entonces, al final deapplicationDidFinishLaunching:
, Hago esto:
TipsViewController *vc = [[TipsViewController alloc]
initWithNibName:@“TipsView" bundle:nil];
[window addSubview:vc.view];
[vc release];
La idea es mostrar esta vista temporalmente. (Tenga en cuenta que no es un VC modal. No hay controlador de navegación en este punto, además de que no hay barra de navegación en esta vista de todos modos).
Una vez que se desestime esta vista, agregaremos nuestra prioridadUITabBarControllerLa vista a la ventana y la transición a ella, luego quite la vista de la punta de la ventana principal. Todavía no he llegado al punto de salida de la vista porque, bueno, sigue leyendo.
El VC de My TipsView está conectado más o menos así:
UIView -> view -> File’s Owner (TipsViewController)
UIImageView -> background image
UIView -> tipView -> File’s Owner
UIImageView -> background image
UIScrollView
UILabel (tip text)
UIButton -> touch-up-inside -> -(IBAction)button1:
UIButton -> touch-up-inside -> -(IBAction)button2:
UIButton -> touch-up-inside -> -(IBAction)button3:
La fuente contiene declaraciones y definiciones para los tresIBAcción llamadas En este momento dos de ellos no hacen nada. El tercero cambia la punta.text
, lo cambia de tamaño para que quepa, y ajusta la vista de desplazamientocontentSize
para emparejar
Cuando ejecuto la aplicación, elConsejosViewController La vista se ve bien. Incluso puedo desplazarme por el texto de la punta. Sin embargo, cuando disparo un retoque en cualquierUIButton, Xcode comienza a colocarme en la fuente (donde he colocado un punto de interrupción en cadaIBAcción) ... y luego se rescata con unEXC_BAD_ACCESS
oobj_stack_overflow
.
He comparado esto con otras partes de la aplicación donde tengo un VC, una vista y botones. Es idéntico en todos los sentidos, excepto que, en este caso,He agregado la vista de un VC como una subvista de la ventana de la aplicación en lugar de empujar el VC en un controlador de navegación. Además, elGuía de programación del controlador View para iPhone OS Los doctores dicen que este es un juego justo:
Si utiliza un controlador de vista único en su aplicación, agregue su vista a una ventana en lugar de agregar el controlador de vista a una barra de pestañas o un controlador de navegación.
Cierto que yohacer tener unUITabBarController esperando en las alas, y tiene pestañas conControladores UINavigacion (y otros VC) en el mismo. Sin embargo, si se muestra la vista de sugerencias, la vista del controlador de la barra de pestañasno aún se ha añadido a la ventana. La intención es intercambiarlo una vez que hayamos terminado de mostrar consejos. En otras palabras, para todos los efectos, estamos actuando temporalmente como si tuviéramos un solo VC en juego. Después, cambiamos a la barra de pestañas y derribamos la punta VC.
Tal vez estoy haciendo algo sutil mal? ¿Hay alguna manera mejor? ("¡Tiene que haber una mejor manera!")
Muestra de seguimiento de la pila:
#0 0x992b6f52 in objc_exception_throw
#1 0x302d6ffb in -[NSObject doesNotRecognizeSelector:]
#2 0x3026e056 in ___forwarding___
#3 0x3024a0a2 in __forwarding_prep_0___
#4 0x308f79d1 in -[UIApplication sendAction:to:from:forEvent:]
#5 0x309598b1 in -[UIControl sendAction:to:forEvent:]
#6 0x3095bad2 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
#7 0x3095a81e in -[UIControl touchesEnded:withEvent:]
#8 0x30910fdf in -[UIWindow _sendTouchesForEvent:]
#9 0x308faecb in -[UIApplication sendEvent:]
#10 0x309013e1 in _UIApplicationHandleEvent
#11 0x32046375 in PurpleEventCallback
#12 0x30245560 in CFRunLoopRunSpecific
#13 0x30244628 in CFRunLoopRunInMode
#14 0x32044c31 in GSEventRunModal
#15 0x32044cf6 in GSEventRun
#16 0x309021ee in UIApplicationMain
#17 0x00002888 in main at main.m:14
Como se puede ver en la traza, terminamos endoesNotRecognizeSelector:
... excepto que puedo ver claramente los métodos en mi fuente de VC de punta. Además, todos están cableados. (No hay cableados múltiples ni nada de eso en IB. Todo se ve bien allí, hasta las relaciones con el propietario del archivo).
¡Pistas bienvenidas / apreciadas!