2009-10-29 15 views
7

Tengo un UIViewController Estoy cargando desde un archivo xib y presionando en la pila del controlador de navegación.La conexión de un UILabel a un IBOutlet causa un bloqueo

En el archivo de cabecera para el controlador de vista, tengo:

IBOutlet UILabel *myTitle; 

no hago nada con "myTitle" en el código todavía; Solo estaba configurando las conexiones.

Cuando compilo y ejecuto la aplicación, y no hay etiquetas definidas en el archivo xib (y, por lo tanto, no hay nada adjunto a IBOutlet), funciona. El controlador de vista se anima a la vista y muestra la vista que construí en el constructor de Interfaz.

Si agrego una etiqueta al xib en el constructor de interfaz, pero no lo conecto a la toma de corriente, y recompilo, todavía funciona, mostrando la etiqueta con el texto predeterminado que ingresé para el.

Pero si conecto el IBOutlet myTitle a la etiqueta en el constructor de interfaz, vuelvo a compilar y ejecutar la aplicación, funciona bien hasta que intento presionar el controlador de vista en la pila del controlador de navegación, en ese punto aparece un bloqueo:

*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20 

Si vuelvo a desconectar la toma de corriente, se reanuda el funcionamiento, mostrando la etiqueta estática como antes. Parece que hay algo funky pasando cuando se muestra la vista, porque el bloqueo ocurre cuando presiono la vista en la pila de navegación.

¿No se supone que debo agregar un IBOutlet a un UILabel o algo así? ¿O hay alguna otra cosa ocurriendo? ¿Alguna sugerencia sobre dónde buscar problemas?

Respuesta

6

¿Creó un accesorio para su IBOutlet?

@property (assign) IBOutlet UILabel *myTitle; 

Y luego, en su archivo .m

@synthesize myTitle 
+0

Tengo un problema idéntico y he creado un descriptor de acceso. Si configuro un punto de ruptura, explota antes de llegar a la primera línea de código. En mi caso, el problema está en el primer (solo) controlador de vista. – Andiih

9

sí, podría ser causado por param name mal, por ejemplo, intente esto:

IBOutlet UILabel title; 

y se llamará a una excepción de esa manera:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520' 
+5

Tuve este problema cuando traté de llamar a un IBOutlet 'título'. Si lo renombré como 'el Título', todo estaba bien. Es de suponer que debe tener cuidado con sus nombres de variables aquí para evitar enfrentamientos. –

+2

De hecho, 'título' está reservado, y no hay un buen error al marcar para hacerle saber que ha pisado la definición interna dentro de un UIView. Este me tuvo perplejo esta noche por un tiempo. – radven

+0

por gritar en voz alta, yo también, ha estado atrapado en esa eternidad, ¡gracias! –

5

que tenían el mismo problema. Resulta que * el título está reservado y Xcode no te dice esto. Una vez que lo renombré a otra cosa, funcionó.

1

En mi caso tuve un UILabel en una UIToolBar. Lo que me solucionó fue borrar la barra de herramientas y agregar una nueva con una nueva UILabel. Un error de IB.

Cuestiones relacionadas