Tengo una vista en una plumilla, que está vinculada a una propiedad en mi controlador de vista con la siguiente línea:

@property (unsafe_unretained, nonatomic) IBOutlet UIView *otherView;

Es unsafe_unretained porque estamos apuntando a dispositivos ios 4, pero usando ARC.

Estamos teniendo un bloqueo porque el otherView está siendo desasignado cuando intentamos mostrarlo, y no estoy muy seguro de por qué. Puse un punto de interrupción en viewWillAppear, y si hago "po otherView" en el depurador, obtengo:

<UIView: 0x6fcc880; frame = (0 0; 320 460); autoresize = RM+BM; layer = <CALayer: 0x6fcc8b0>>

Lo verifiqué al final del método viewWillAppear, y todavía está allí también. Pero luego, si pongo un punto de interrupción al comienzo de viewDidAppear, obtengo:

0x6fcc880 does not appear to point to a valid object.

¿Alguien puede señalarme en la dirección correcta con esto? Si cambio la declaración de propiedad a 'Fuerte', entonces este problema no ocurre, y entiendo que al cambiarla a Fuerte la estoy reteniendo (y por lo tanto evitando que se desasigne), pero no creo que debería tener que hacer esto?

Saludos, Nick

0
dark_perfect 5 abr. 2012 a las 18:11
1
¿Dónde más se retiene la vista? Si no hay otro lugar, entonces debe conservarlo allí.
 – 
N_A
5 abr. 2012 a las 18:15

1 respuesta

La mejor respuesta

Necesita tener una propiedad retenida (strong | retain) en cualquier objeto de nivel superior de un xib.

enter image description here

En este ejemplo anterior, view1 necesitaría tener una propiedad retenida. view2 no requiere una propiedad retenida, pero generalmente la dejo como retenida de todos modos, ya que no daña nada.


¿Por qué no se requiere la retención?

view2 no requiere una propiedad retenida porque es propiedad de view1 y cualquier referencia que tenga are arbitrary references between objects that do not imply ownership. (Apple, Guía de programación de recursos). Pero tampoco está de más tener una propiedad retenida, solo asegúrese de llamar a self.view2 = nil en viewDidUnload

2
Community 20 jun. 2020 a las 12:12
¡Ah, ja! No sabía esto. En base a esto, ¿puedo también suponer que el controlador de vista retiene lo que le asigne como vista? Muchas gracias
 – 
dark_perfect
5 abr. 2012 a las 21:33
1
Nunca es prudente asumir cosas, pero me imagino que sería una buena suposición.
 – 
Paul.s
6 abr. 2012 a las 02:24