1

ビューコントローラをポップアップするボタンをクリックすると、アプリ(MyLittleApplicationという名前)がランダムにクラッシュします。クラッシュログで(どこから探し始めるべきかを見つけるために)いくつかのヘルプを使用できます:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x600332e0
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x351faf78 objc_msgSend + 16
1   Foundation                      0x37d0a74c NSKVOPendingNotificationCreate + 216
2   Foundation                      0x37d0a652 NSKeyValuePushPendingNotificationPerThread + 62
3   Foundation                      0x37cfc744 NSKeyValueWillChange + 408
4   Foundation                      0x37cd3848-[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 176
5   Foundation                      0x37d55a14 _NSSetPointValueAndNotify + 76
6   UIKit                           0x311f825a -[UIScrollView(Static) _adjustContentOffsetIfNecessary] + 1890
7   UIKit                           0x31215a54 -[UIScrollView setFrame:] + 548
8   UIKit                           0x31215802 -[UITableView setFrame:] + 182
9   POViO                           0x000fcac8 0xf8000 + 19144
10  UIKit                           0x31211b8e -[UIViewController _setViewAppearState:isAnimating:] + 138
11  UIKit                           0x3126b8a8 -[UIViewController beginAppearanceTransition:animated:] + 184
12  UIKit                           0x3121490c -[UINavigationController _startTransition:fromViewController:toViewController:] + 832
13  UIKit                           0x312144fc -[UINavigationController _startDeferredTransitionIfNeeded] + 244
14  UIKit                           0x3125e8e4 _popViewControllerNormal + 184
15  UIKit                           0x3125e712 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 386
16  UIKit                           0x31242bba -[UINavigationController popToViewController:transition:] + 626
17  POViO                           0x001074e6 0xf8000 + 62694
18  CoreFoundation                  0x374553f6 -[NSObject performSelector:withObject:withObject:] + 46
19  UIKit                           0x311eae00 -[UIApplication sendAction:to:from:forEvent:] + 56
20  UIKit                           0x311eadbc -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 24
21  UIKit                           0x311ead9a -[UIControl sendAction:to:forEvent:] + 38
22  UIKit                           0x311eab0a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 486
23  UIKit                           0x311eb442 -[UIControl touchesEnded:withEvent:] + 470
24  UIKit                           0x311e9924 -[UIWindow _sendTouchesForEvent:] + 312
25  UIKit                           0x311e9312 -[UIWindow sendEvent:] + 374
26  UIKit                           0x311cf68e -[UIApplication sendEvent:] + 350
27  UIKit                           0x311cef34 _UIApplicationHandleEvent + 5820
28  GraphicsServices                0x33c11224 PurpleEventCallback + 876
29  CoreFoundation                  0x374cf51c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
30  CoreFoundation                  0x374cf4be __CFRunLoopDoSource1 + 134
31  CoreFoundation                  0x374ce30c __CFRunLoopRun + 1364
32  CoreFoundation                  0x3745149e CFRunLoopRunSpecific + 294
33  CoreFoundation                  0x37451366 CFRunLoopRunInMode + 98
34  GraphicsServices                0x33c10432 GSEventRunModal + 130
35  UIKit                           0x311fdcce UIApplicationMain + 1074
36  MyLittleApplication                 0x000f90ae 0xf8000 + 4270
37  MyLittleApplication                 0x000f9048 0xf8000 + 4168

通知センターと関係があるのではないかと思い、UIDeviceOrientationDidChangeNotifications使っています。これは本当ですか、それとも私は間違った方向を見ていますか?
呼んでいます

[notificationCenter removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil] 

viewDidUnload、これで十分ですか?

探し始めるべきバグを教えてください。

4

3 に答える 3

1

これは、クラッシュが発生したときに呼び出されたメソッドのスタックが表示されるスタックトレースです。一番下から始めて一番上まで作業し、アプリからのメソッド呼び出しを検索します(スタックトレースにはフレームワークからの呼び出しも含まれます(例-[UIScrollView(Static) _adjustContentOffsetIfNecessary]))。
アプリからの最上位のメソッド呼び出しがエラーの原因である可能性が高く、システムが後で何を試行したかを確認できます。

あなたの場合、あなたが電話popToViewControllerをかけ、iOSフレームワークが1つから次への移行をアニメーション化しようとしているようですUIViewController。テーブルビューがフレームを設定してcontentOffsetまでスクロールするのに問題があるようです。

これは、メモリエラーが原因である可能性があります。Exception Type: EXC_BAD_ACCESS (SIGSEGV)
EXC_BAD_ACCESS を調べることでこのヒントを得ることができます。これは、メモリに存在しないものにアクセスしようとするヒントである可能性があります->すでにリリースされています。

一般に、Xcodeでexveptionブレークポイントをアクティブにすることをお勧めします。例外ブレークポイントを設定しましたか?

  • ブレークポイントエディタペインに移動しました
  • 左下隅のxをクリックします
  • 例外ブレークポイントの追加を選択します

これで、例外が発生した場合にスタックトレースが表示されるはずです。そして、Xcodeはクラッシュが発生する行にあるはずです。

次に知っておくべきことは、Instrumentsのゾンビモードです。
このビデオでゾンビモードの良い紹介を見つけることができます。

于 2012-08-24T09:37:07.267 に答える
0

あなたの場合、あなたはあなたが持っているのを見ることができますEXC_BAD_ACCESS (SIGSEGV)。これは、ここにないもの、または少なくともここにはあったがもう存在しないものにアクセスしようとしていることを意味します。エラーを再現できる場合は、Instrumentsのゾンビモードを使用してみてください。アクセスする予定だったものが表示されます。この問題の解決策は、多くの場合、まだ必要なリソースをリリースするのが早すぎることです。

于 2012-08-24T09:40:24.380 に答える
0

どこで問題が発生しているのかを把握できるように、メソッドにNSLogステートメントをいくつかスローすることをお勧めします。これらのiOSメッセージは、少しわかりにくい場合があります。

于 2012-08-24T20:18:40.003 に答える