Estoy aprendiendo iOS Dev y tengo una aplicación Mapkit de bloqueo. Necesito ayuda para comprender este registro de bloqueo

StackOverflow https://stackoverflow.com/questions/6811085

Pregunta

Estoy trabajando en la aplicación y la aplicación llamado Whreeami de la "Guía BNR para la programación de iOS" Capítulo 5. Tengo la aplicación trabajando y la dejé en mi teléfono para mostrar a la esposa y la familia que estoy aprendiendo cosas. Sin embargo, está exhibiendo un comportamiento regular. Esto es lo que pasa ...

Cuando abre la aplicación por primera vez y la ejecuta, lo hace bien, si presiona a casa y luego la abre nuevamente en unos minutos, está bien, si la deja en segundo plano, vuelva a abrir más de unos minutos (digamos como 5 o más ) más tarde se bloquea. Luego puede volver a abrirlo y funciona bien, pero el patrón se repite.

He revisado dos veces todo mi código con el libro y busqué en la página Errata, pero no puedo entender qué podría estar mal. El organizador XCode muestra registros para todos los bloqueos, pero aún no sé cómo leer eso. Estaba empezando a preguntarme si, dado que esta es solo una aplicación de proyecto de aprendizaje, no para un uso real, tal vez le falta algo que lo hace multitarea/fondo/reapertura? ¿correctamente? Estoy usando Xcode 4.1 en Lion con iPhone 4 con iOS 4.3.4. Agradecería cualquier ayuda que cualquiera pueda ofrecer.

Esto es lo que creo que es la parte relevante del registro de bloqueo:

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 supongo que la última función 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];

}
¿Fue útil?

Solución

Intente verificar si la región tiene algún valor. También cambiar 250 a 250.0. Dame algunos comentarios. :)

Otros consejos

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

- (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];
    }
}

Lamento "Necro" un hilo viejo, pero pensé que esto podría ayudar a alguien a buscar ayuda. Por cierto, estoy usando Xcode 4.3.2 e iOS 5.1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top