2011-07-25 5 views
7

私は、「BNR Guide to iOS programming」の第5章からwhereamiというアプリを開発しています。私はアプリを稼働させて、妻と家族に見せてもらいました。それは、しかし、定期的なクラッシュ動作を展示している。あなたがそれを残す場合はここで私はiOSデベロッパーを学んでいて、MapKitアプリがクラッシュしています。このクラッシュログを理解するのに助けが必要です

をするときは、最初のオープンアプリ....何が起こるかであり、それは罰金ない、それを実行し、 あなたが家にヒットして、それがうまくないわずか数分以内に再度開くと、 バックグラウンドで再起動してから数分以上(たとえば5以上)、クラッシュします。 その後、再び開くことができますが、それでも問題はありませんが、パターンは繰り返されます。

私は本のコードをすべてダブルチェックして、正誤表を見ていますが、何が間違っているのか理解できません。 Xcodeのオーガナイザにはすべてのクラッシュのログが表示されますが、その読み方はまだ分かりません。私はこれが単なる学習プロジェクトのアプリであり、実際の使用には向いていないのではないか、多分マルチタスク/バックグラウンド/再オープンの何かが不足しているのだろうか?正しく? iOS 4.3.4を実行しているiPhone 4でXcode 4.1をライオンで使用しています。私は誰でも提供できる援助に感謝します。ここで

は、私がクラッシュログの関連部分と思われるものである:

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

} 

答えて

3

はチェックしてみてください。 250250.0に変更してください。フィードバックをお願いします。 :)

+0

回答いただきありがとうございます。すぐに250-250.0を変更します。それが私の問題を解決しようとしているのですか?さらに重要なのは、地域に価値があるかどうかを確認することですか?私はapplictionDidFinishLoading:withOptionsまたはmapView delegateレスポンダで処理されるほとんどのものを持っています。 – vichudson1

+0

このメソッドはおそらくintの代わりに浮動小数点数を受け入れているためです。 – Peres

+0

intをfloatに変更しました。 msg [worldView setRegion:region]を送信する前に、地域に値があるかどうかを確認しようとしています。領域に値があるかどうかを確認するにはどうすればよいですか?私は運がないならif(region!= NIL)を試しました。 Xcodeはそれを好まないようです。私はC++の経験を持っていますが、私は客観的なC.に新しいです。 – vichudson1

7

本書の第3版でこの問題が発生し、本の第2版フォーラムでは答えられましたが、ここでは解説されていません。問題は、アプリがバックグラウンドで実行されてから5-10分以上戻ったときに、WhereAmIAppDelegateが無効な場所を受け取ることです。わからない、なぜこれが起こるが、これは、私はそれを固定する方法である:「ネクロ」古いスレッドに申し訳

- (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を使用しています。

関連する問題