10

アップデート

これは、古いバージョンのXcodeに対する古い質問です。この問題は、修正されたXcodeのバグであることが判明しました。

オリジナル

新しいタブiphoneアプリケーション(ARCを使用)を作成して作成したストーリーボードがあります

タブの1つで、ジェスチャレコグナイザー(任意ですが、パンなど)をコントロールにドラッグし、セレクターをアクションに設定すると、タブに移動するとすぐにクラッシュします。

コンソールには何もありません-ストーリーボードがロードされている間に発生しているように見えます(viewDidLoadが呼び出されることはありません)。

  1. 詳細情報の入手方法がわかりません
  2. 別のタブでは、これは正常に機能します。両方のタブが自動的に生成されました。

(ビューで何かを台無しにした可能性はありますが、自分が何をしたかを理解する手がかりがありません)。

プログラムでジェスチャを作成すると、正常に機能しますが、ストーリーボードでジェスチャを機能させるのは良いことです。間違っていると、ある時点で別の方法でクラッシュが発生するのではないかと心配しています。

より詳しい情報

シミュレーターで私は得る

-[__NSCFString setView:]: unrecognized selector sent to instance 0x6d2db70

繰り返しになりますが、デバッグ手法が必要です。たとえば、0x6d2db70がどのオブジェクトであるかを確認する方法はありますか?

これはこの質問とまったく同じです(答えはありません):

InterfaceBuilderのジェスチャーレコグナイザーがアプリをクラッシュさせる

より詳しい情報

これを再現するのは簡単です

  1. 新しいiPhoneタブ付きアプリケーション、ARCおよびストーリーボード
  2. タップジェスチャを2番目のタブのビューにドラッグします(最初のタブで機能します)
  3. (IBAction)を作成します
  4. ジェスチャのセレクタ接続を#3のアクションに接続します
  5. 実行し、2番目のタブに移動します

クラッシュします。私のアプリでも同じですが、デフォルトのタブは機能しますが、他のタブは機能しません

4

2 に答える 2

9

エラーメッセージは、プログラムがsetView:のインスタンス__NSCFString(明らかにのプライベート実装クラスNSString)にメッセージを送信していることを示しています。

ゾンビを有効にして実行してみたことを確認してください。ゾンビは、認識できないセレクターエラーを簡単に引き起こす可能性があります。

ゾンビでない場合は、にブレークポイントを設定し-[NSObject doesNotRecognizeSelector:]ます。ブレークポイントに到達すると、スタックトレースから問題を特定できる場合があります。そうでない場合は、オブジェクトのを印刷できます(これはほとんどのクラスdebugDescriptionの場合と同じです)。description

debugDescriptionシミュレーターでは、次のようにオブジェクトを出力するようにデバッガーに要求できます。

(gdb) frame 0
#0  0x013bcbff in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po ((int*)$ebp)[2]
this is my test string

デバイスでは、次のようにします。

(gdb) frame 0
#0  0x344bca22 in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po $r0
this is my test string

アップデート

再現する手順に基づくと、これはUIKitのバグです。 バグレポートを提出してください。SecondViewControllerに強力なアウトレットを作成し、それをジェスチャレコグナイザーに接続することで 、バグを回避できます。アウトレットをnilに設定していることを確認してくださいviewDidUnload

アップデート

アウトレットをnilに設定しないでください-バグの一部はUIKitが保持されていないことです-レコグナイザーがリリースされていないことを確認するために参照を保持する必要があります。

于 2012-01-28T19:04:13.407 に答える
2

私の場合、コードをドラッグアンドドロップしてジェスチャレコグナイザーのIBOutletを自動作成すると、Xcodeは「strong」属性を持つプロパティを正しく作成しましたが、viewDidUnloadに「settonil」も追加しました。「ゼロに設定」を削除すると、問題が解決しました。

于 2012-06-21T12:02:45.810 に答える