Я изучаю iOS и у меня есть приложение MapKit.Нужна помощь в понимании этого журнала сбоев - PullRequest
7 голосов
/ 25 июля 2011

Я работаю и приложение под названием whereami из главы 5. «Руководство по BNR по программированию на iOS». У меня есть приложение, и я оставил его на своем телефоне, чтобы показать жене и семье, что я учусь.Это демонстрирует регулярное поведение сбоя все же.Вот что происходит ....

Когда вы впервые открываете приложение и запускаете его, оно работает нормально, если вы нажмете кнопку «Домой», а затем снова откроете его в течение нескольких минут, все будет хорошо, если вы оставите его взатем фон снова открывается более чем на несколько минут (скажем, 5 или более), а затем происходит сбой.Затем вы можете снова открыть его, и это нормально, но шаблон повторяется.

Я дважды проверил весь свой код в книге и посмотрел на страницу с ошибками, но не могу понять, что может быть не так.Организатор XCode показывает журналы для всех сбоев, но я пока не знаю, как это прочитать.Я начинал задаваться вопросом, если это просто приложение учебного проекта, не предназначенное для реального использования, может быть, в нем отсутствует что-то, что делает его многозадачным / background / reopen ???правильно?Я использую Xcode 4.1 на Lion с iPhone 4 под управлением iOS 4.3.4.Я был бы признателен за любую помощь, которую может предложить каждый.

Вот что я считаю важной частью журнала аварий:

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

Я очень новичок в этом, но я предполагаю,что последняя вызванная функция находится здесь:

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)

код метода из WhereAmIAppDelegate.m здесь:

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

}

Ответы [ 2 ]

7 голосов
/ 04 апреля 2012

Я столкнулся с этой проблемой в 3-м издании книги и увидел, что на нее ответили на 2-м издании книги, но не здесь. Проблема заключается в том, что WhereAmIAppDelegate получает недопустимое расположение, когда приложение возвращается из фонового режима в течение более 5-10 минут. Не уверен, почему это происходит, но вот как я это исправил:

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

Извините, что "некро" старая ветка, но я подумал, что это может помочь кому-то, кто ищет помощь. Кстати, я использую Xcode 4.3.2 и iOS 5.1.

3 голосов
/ 27 июля 2011

попробуйте проверить, имеет ли регион какое-либо значение. Также измените 250 на 250.0. Дайте мне отзыв. :)

...