AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola..

Tengo un fichero .xib en el que he añadido un MKMapViewy y un Object (cubo naranja) que es una clase que cumple el protocolo MKMapViewDelegate, y he enlazado el objeto como delegate del Mapa.

El problema que tengo es que cuando ejecuto la app, el objecto que hace de "delegado" es liberado de la memoria y cuando el mapa lo va usar me da un EXE-BAD-ACCESS.

El "delegado" solo lo uso en el XIB por lo que mi app no lo libera :S

Alguna idea de porque se libera?

He aplicado una "solucion", en el metodo "awakeFromNib" del "delegado" hago un [self retain] y listo, pero no me parece muy elegante...

preguntado 09 Jun '11, 20:45

German%20Laullon's gravatar image

German Laullon
663310


Ya se lo que esta pasando.

El problema es que los "delegate" no son retenidos, por lo que si mi objeto (que hace de delegado del MKMapView) no es retenido por otro objeto de mi app es liberado.

La opción de que el objeto se retenga así mismo es una chapuza y crea un leak, así que me toca refactorizar un poco.

enlace permanente

respondido 13 Jun '11, 19:22

German%20Laullon's gravatar image

German Laullon
663310

Prueba a poner un breakpoint en dealloc y en release y mira a ver quien es que hizo el release. Es lo único que se me ocurre así a bote pronto.

enlace permanente

respondido 10 Jun '11, 11:46

victor's gravatar image

victor
2.9k51248

Si, eso lo tengo controlado con Instruments, y ese es el problema, que no es mi app la que lo hace Gracias.

(10 Jun '11, 19:54) German Laullon

Ese object que has añadido en el InterfaceBuilder supongo que estará conectado a un Outlet.

Mira que al outlet tenga esta pinta:

@property (retain)IBOutlet TuClase *obj;

Si haces esto te tocará hacer un release de obj en el dealloc.

enlace permanente

respondido 13 Jun '11, 18:44

Aram's gravatar image

Aram
1.1k321

si, ese es el problema, los "delegate" no son retenidos.

(13 Jun '11, 19:23) German Laullon

No estoy muy seguro que cómo lo tienes montado todo pero me imagino que tienes: 1. ViewController en la que tienes la referencia de la mapview.

En el mismo ViewController deberías tener el objeto (obj1) en el que delega el mapview. Y es en el view controller donde deberías tener retenido el obj1 ya que como bien dices el hacer mapView.delegate = obj1 no retiene al obj1.

Entonces tu al poner el objeto que hace de delegado en el IB, este te lo crea pero el objeto se muere ya que no hay nadie que lo retenga.

(13 Jun '11, 19:55) Aram
Tu respuesta:
Activar/desactivar vista previa

Sobre esta pregunta

Etiquetas de la pregunta:

×244
×110
×20

Pregunta realizada el: 09 Jun '11, 20:45

Pregunta visitada: 802 veces

Última modificación: 13 Jun '11, 19:55

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Realizar Donación