Estoy aprendiendo iOS dev y tengo una aplicación MapKit que falla. ¿Necesita ayuda para comprender este logging de locking?

Estoy trabajando y la aplicación se llama whereami de "BNR Guide to iOS programming" capítulo 5. Tengo la aplicación funcionando y la dejé en mi teléfono para mostrarle a la esposa y la familia que estoy aprendiendo cosas. Sin embargo, está exhibiendo un comportamiento de caída regular. Esto es lo que pasa …

La primera vez que abras la aplicación y la ejecutas funciona bien, si presionas en casa y luego la vuelves a abrir dentro de unos pocos minutos, si la dejas en segundo plano, vuelve a abrir más de unos minutos (digamos como 5 o más ) luego se cuelga. Luego puede volver a abrirlo y funciona bien, pero el patrón se repite.

Revisé todo mi código con el libro y miré la página de erratas, pero no puedo entender qué podría estar mal. El organizador Xcode muestra los loggings de todos los lockings, pero aún no sé cómo leerlos. Estaba empezando a preguntarme si, dado que esta es solo una aplicación de proyecto de aprendizaje, no está destinada a un uso real, tal vez le falta algo que lo haga multitarea / background / reabrir ??? ¿correctamente? Estoy usando Xcode 4.1 en Lion con iPhone 4 con iOS 4.3.4. Le agradecería cualquier ayuda que alguien pueda ofrecer.

Esto es lo que creo que es la parte relevante del logging de lockings:

Incident Identifier: 352B538C-75BB-4BDF-9C2B-EC9613CE1B44 CrashReporter Key: 5896ed7851b999169919cab30c69940f74ed6b0c Hardware Model: iPhone3,1 Process: WhereAmI [775] Path: /var/mobile/Applications/DB57A854-01F8-460F-B8CD-38B8FC50FBAF/WhereAmI.app/WhereAmI Identifier: WhereAmI Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2011-07-23 18:47:19.093 -0400 OS Version: iPhone OS 4.3.4 (8K2) Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x356d8a1c __pthread_kill + 8 1 libsystem_c.dylib 0x34d543b4 pthread_kill + 52 2 libsystem_c.dylib 0x34d4cbf8 abort + 72 3 libstdc++.6.dylib 0x35434a64 __gnu_cxx::__verbose_terminate_handler() + 376 4 libobjc.A.dylib 0x35fdd06c _objc_terminate + 104 5 libstdc++.6.dylib 0x35432e36 __cxxabiv1::__terminate(void (*)()) + 46 6 libstdc++.6.dylib 0x35432e8a std::terminate() + 10 7 libstdc++.6.dylib 0x35432f5a __cxa_throw + 78 8 libobjc.A.dylib 0x35fdbc84 objc_exception_throw + 64 9 CoreFoundation 0x3504d3c6 -[NSException raise] + 2 10 MapKit 0x3389bcb2 -[MKMapView setRegion:animated:] + 318 11 WhereAmI 0x000029cc -[WhereAmIAppDelegate mapView:didUpdateUserLocation:] (WhereAmIAppDelegate.m:52) 12 MapKit 0x338a11b6 -[MKMapView(UserPositioningInternal) resetUserLocation] + 142 13 MapKit 0x338a074e -[MKMapView(UserPositioningInternal) locationManagerDidReset:] + 22 14 CoreFoundation 0x34fbaefc -[NSObject(NSObject) performSelector:withObject:] + 16 15 CoreFoundation 0x34ff82f2 -[NSArray makeObjectsPerformSelector:withObject:] + 394 16 MapKit 0x33893802 -[MKLocationManager _reportLocationStatus:] + 34 17 MapKit 0x338937ce -[MKLocationManager _reportLocationReset] + 14 18 MapKit 0x33894d24 -[MKLocationManager reset] + 88 19 MapKit 0x338770a2 -[MKLocationManager applicationResumed:] + 62 20 Foundation 0x30fa017c _nsnote_callback + 136 21 CoreFoundation 0x3501c208 __CFXNotificationPost_old + 396 22 CoreFoundation 0x34fb6ee4 _CFXNotificationPostNotification + 112 23 Foundation 0x30f9d5cc -[NSNotificationCenter postNotificationName:object:userInfo:] + 64 24 UIKit 0x3640f720 -[UIApplication _handleApplicationResumeEvent:] + 900 25 UIKit 0x362b9e20 -[UIApplication handleEvent:withNewEvent:] + 2724 26 UIKit 0x362b920e -[UIApplication sendEvent:] + 38 27 UIKit 0x362b8c4c _UIApplicationHandleEvent + 5084 28 GraphicsServices 0x35827e70 PurpleEventCallback + 660 29 GraphicsServices 0x35827efa PurpleEventSignalCallback + 10 30 CoreFoundation 0x35024a72 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6 31 CoreFoundation 0x35026758 __CFRunLoopDoSources0 + 376 32 CoreFoundation 0x350274e4 __CFRunLoopRun + 224 33 CoreFoundation 0x34fb7ebc CFRunLoopRunSpecific + 224 34 CoreFoundation 0x34fb7dc4 CFRunLoopRunInMode + 52 35 GraphicsServices 0x35827418 GSEventRunModal + 108 36 GraphicsServices 0x358274c4 GSEventRun + 56 37 UIKit 0x362e3d62 -[UIApplication _run] + 398 38 UIKit 0x362e1800 UIApplicationMain + 664 39 WhereAmI 0x000027c0 main (main.m:14) 40 WhereAmI 0x00002768 start + 32 

Soy muy nuevo en esto pero estoy adivinando que la última function llamada está aquí:

 8 libobjc.A.dylib 0x35fdbc84 objc_exception_throw + 64 9 CoreFoundation 0x3504d3c6 -[NSException raise] + 2 10 MapKit 0x3389bcb2 -[MKMapView setRegion:animated:] + 318 11 WhereAmI 0x000029cc -[WhereAmIAppDelegate mapView:didUpdateUserLocation:] (WhereAmIAppDelegate.m:52) 

el código de método de WhereAmIAppDelegate.m está aquí:

 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{ // Zoom in on user here CLLocationCoordinate2D loc = [userLocation coordinate]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250, 250); [worldView setRegion:region animated:YES]; } 

intenta comprobar si la región tiene algún valor. También cambia de 250 a 250.0 . Dame algunos comentarios 🙂

Me encontré con este problema con la 3 ª edición del libro y vi que fue respondido en los foros de la 2 ª edición del libro, pero no aquí. El problema es que WhereAmIAppDelegate recibe una location no válida cuando la aplicación vuelve a ejecutarse en segundo plano durante más de 5-10 minutos. No estoy seguro de por qué sucede esto, pero así es como lo solucioné:

 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { // Here we are... but how do we actually zoom? CLLocationCoordinate2D loc = [userLocation coordinate]; if(CLLocationCoordinate2DIsValid(loc)) { MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 320, 480); [worldView setRegion:region animated:YES]; } } 

Perdón por "necro", un hilo antiguo, pero pensé que esto podría ayudar a alguien a search ayuda. Por cierto, estoy usando Xcode 4.3.2 y iOS 5.1.