|
Hola, Tengo una clase que deriva de NSManagedObject la cual tiene un block para satisfacer unas llamadas asíncronas. Cuando trato de invocar a este block tras cargar mi NSManagedObject me da un error de acceso a memoria. No esta persistido. Me gustaría si pudiera ser guardarme el block y no tener que settearlo cada vez. ¿Alguna idea al respecto? Mi clase seria algo así:
|
|
Te tienes que hacer una copia del bloque, y además como lo vas a tratar como una variable con set y get deberías crearte una propiedad. Y para mayor facilidad de uso te podrías crear también un typedef para nombrar el tipo de ese bloque: El typedef:
Propiedad:
El método setBlock ya no te haría falta, desde el código harías:
Y luego para usarlo dentro de la clase llámalo con self:
Por último tendrías que liberarlo en el Muy importante el COPY de la propiedad, si no quisieras hacerte propiedad tendrías que hacer datablock = [block copy]; Pero con esto tendrías memory leaks, porque no liberas el bloque anterior si haces varias asignaciones y al liberar tu objeto manejado. Los bloques se guardan en el stack, como cuando pasas variables en los argumentos de los métodos, si te quieres guardar uno permanentemente tienes que hacer una copia al heap. Espero que esto te solucione tus problemas, y si es así pues vota :) |
|
Hola, He estado probando un poco lo que me comentabas pero me salta un error de memoria al invocar al bloque. Si NO lo marco como transient me salta una excepción del tipo, creo q es necesario ponerlo como transient:
Por cierto, estoy con iOS 5 SDK con ARC activado. Resumo un poco el código q tengo metido:
Cuando almaceno el bloque seria algo asi:
Finalmente cuando invoco al bloque q es donde salta en error:
Disculpa si se me escapa algo básico pues llevo poco tiempo en el mundillo iOS. Y muchas grácias ante todo. No sé si se pueden guardar los bloques en core data... ¿Has visto en algún sitio que se puedan guardar?
(16 Mar '12, 19:06)
LightMan
|