5

Tenía un mensaje EXC_BAD_ACCESS en mi consola. Leí sobre las variables de entorno NSZombieEnabled y MallocStackLoggingNoCompact en this site. Creé mis variables de entorno: NSZombieEnabled = SÍ y MallocStackLoggingNoCompact = 1. En la consola, viDepuración EXC_BAD_ACCESS desde un NSString

2010-03-01 19: 13: 46.924 CruzNomad [7952: 207] *** - [CFString stringByAddingPercentEscapesUsingEncoding:]: mensaje enviado a la instancia desasignado 0x58448e0

Luego, al (BGF) del sistema, lo hice información malloc-historia 0x58448e0, que me dio:

Alloc: Block address: 0x058448e0 length: 64 
Stack - pthread: 0xa0b33500 number of frames: 25 
    0: 0x98e089bc in malloc_zone_malloc 
    1: 0x21516aa in _CFRuntimeCreateInstance 
    2: 0x2152bf8 in __CFStringCreateImmutableFunnel3 
    3: 0x21567d9 in CFStringCreateCopy 
    4: 0x21742fc in _CFStringCreateWithFormatAndArgumentsAux 
    5: 0xdb546 in -[NSPlaceholderString initWithFormat:locale:arguments:] 
    6: 0xdb4d8 in +[NSString stringWithFormat:] 
    7: 0x23aa3 in -[BuisnessCardViewController viewDidLoad] at /Users/.../Classes/BuisnessCardViewController.m:85 
    8: 0x3d6796 in -[UIViewController view] 
    9: 0x347b4 in -[gm_menuViewController btn5_Pressed:] at /Users/.../Classes/menuViewController.m:535 
    10: 0x357459 in -[UIApplication sendAction:to:from:forEvent:] 
    11: 0x3baba2 in -[UIControl sendAction:to:forEvent:] 
    12: 0x3bcdc3 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] 
    13: 0x3bbb0f in -[UIControl touchesEnded:withEvent:] 
    14: 0x370e33 in -[UIWindow _sendTouchesForEvent:] 
    15: 0x35a81c in -[UIApplication sendEvent:] 
    16: 0x3610b5 in _UIApplicationHandleEvent 
    17: 0x2984ed1 in PurpleEventCallback 
    18: 0x2197b80 in CFRunLoopRunSpecific 
    19: 0x2196c48 in CFRunLoopRunInMode 
    20: 0x298378d in GSEventRunModal 
    21: 0x2983852 in GSEventRun 
    22: 0x362003 in UIApplicationMain 
    23: 0x2c8c in main at /Users/.../source/main.m:14 
    24: 0x2bfa in start 

La línea 7 dice que el problema estaba en la línea 85 de BuisnessCardViewController.m. Esa línea está aquí:

fullAddress = [NSString stringWithFormat:@"%@ %@", fullAddress, myString]; 

estoy añadiendo los contenidos de fullAddress y miCadena y almacenar de nuevo en fullAddress.

Si interpreto esto correctamente, parece que después de esta línea, fullAddress está desasignado. Cuando dejo caer un punto de interrupción y me cierro sobre la variable, su valor dice "fuera del alcance".

fullAddress funciona más adelante en este método. Lo uso para enviar para enviar a Google para geocodificación inversa en la línea 164 del mismo método.

NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [fullAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

Incluso aquí, dice "fuera de alcance". Estoy perplejo ... ¿algún consejo?

Gracias!

Thomas

+0

¿Puedes publicar un poco más de contexto? Si dice que la variable salió del alcance, ¿podemos ver el alcance completo? –

+0

¿Está utilizando 'fullAddress' or' myString' en otro lugar? – FelixLam

+0

Además, por si acaso fue un accidente, ha escrito incorrectamente a Business como Buisness. – dreamlax

Respuesta

3

En la mayoría de los casos esto ocurre cuando no conserve un atributo que es objeto y envía mensajes a finales de los años en otros métodos, tarde.

Así, en algunas cadenas se inicializan intento:

[fullAddress retain]; 

o

[myString retain]; 

dependiendo cuál es inicializado en otro método.

+0

Si la respuesta no está del todo clara, discúlpeme por mi lenguaje por favor y escriba el siguiente comentario. – mxg

1

Ha intentado anexar cadena con formato?

fullAddress = [NSString stringWithFormat:@"%@ %@", fullAddress, myString]; 

con:

- (NSString *)stringByAppendingFormat:(NSString *)format ... 

así:

[fullAddress stringByAppendingFormat:@" %@", myString]; 
+0

Gracias por las respuestas, amigos. Y no, no me di cuenta de que los negocios se deletreaban mal. @dreamlax - No escribí esa clase (afortunadamente jajaja): -) ... Solo estoy trabajando en funciones específicas. ¡Gracias por señalarlo! Descubrí mi problema. Como stringWithFormat devuelve un objeto liberado automáticamente, lo conservé justo después de usarlo por primera vez en el método. [retener fullAddress]; hizo el truco (como ahora lo veo ha sugerido mxg). Una vez más, ¡gracias a todos! -Thomas – Thomas