0

カスタムUITableViewCellの問題により、ストーリーボードでプロジェクトを作成しました。新しいプロジェクトを作成し、すべてのデータを新しいクラスにコピーし、ボタンや画像などをストーリーボードビューから新しいプロジェクトのnib/xibファイルにコピーしました。

いずれかのボタンをクリックすると、アプリがエラーなしでクラッシュし、デリゲートファイルが開き、このコード行が強調表示されます。

return UIApplicationMain(argc, argv, nil, NSStringFromClass([ThisOrThatAppDelegate class]));

IBからコントローラーへの必要なアクションの接続はすでに行っています。また、クリーンなコードのためにCommand + Shift+Kを試しました。しかし、問題はまだあります。

4

1 に答える 1

2

最初に問題が何であるかを知る必要があります。

  • Debug build configを使用し、lldbまたはgdbを使用しています
  • すべての例外にブレークポイントがあることを確認してください
  • 左上の[ブレークポイント]ボタンが有効になっていることを確認してください。
  • アプリを実行する

デバッガーに侵入する必要があります。デバッガーが例外をキャッチするポイントに到達する必要があります。

次に、質問を編集して、どのような例外が発生するかを教えてください。objc_msgSend()エラーが発生することを推測します。これは、一部のオブジェクトが存在しないオブジェクトまたは割り当て解除されたオブジェクトにメッセージを送信しようとしていることを意味します。それが真実であることが判明した場合は、「ゾンビ」(すべてのオブジェクトをそのままにしておく)を有効にして、そのうちの1つにメッセージが表示されるかどうかを確認できます。

何も役に立たないと思われる場合は、NSLogメッセージの追加を開始して、アプリが起動したときにそれを追跡します(または、選択したブレークポイントを使用します)。これには長い時間がかかるため、逆方向に作業する可能性があります。appDelegateapplication:didFinishLaunchingWithOptions:が呼び出されるかどうか、また最後に到達するかどうかを確認してください。

残念ながら、このタイプの問題は追跡するのに多くの時間がかかる可能性があります。一部のオブジェクトがメインキュー上の別のオブジェクトのメッセージをキューに入れている可能性があるため、クラッシュが発生したときに、誰がいつ何をしたかを確認できません。

また、objc_msgSendの問題では、デバッガーが停止すると、メッセージが表示されたオブジェクトを簡単に確認できません。ただし、デバッガーをオフにしてアプリを実際にクラッシュさせると、コンソールアプリでクラッシュレポートを見つけて、そこから詳細情報を取得できます。

于 2012-07-17T17:40:43.190 に答える