1

iPhone アプリでは、ボタン付きのビューがあります。Button はIBActionMyClass の に接続されています。

@interface MyClass : NSObject   
-(IBAction)buttonPressed:(id)sender;
@end

このボタンをクリックするとすぐに、EXC_BAD_ACCESS が返されます。クラスMyClassは、右側のサイドバーから「オブジェクト」コンポーネントを使用してビューに追加されました。

これは、カスタム コントローラーが ARC によって割り当て解除されるためだと思います。これは正しいです?インターフェイス コントローラ経由で追加されたオブジェクトは自動的に保持されませんか? インターフェイス ビルダー経由で接続したインスタンスを保持するにはどうすればよいですか?

4

2 に答える 2

1
  1. MyClassUIViewではなく、のサブクラスである必要がありますNSObject

  2. オブジェクトの割り当てが時期尚早であると思われる場合は、-deallocメソッドを実装し、ログとブレークポイントを追加してください。

  3. カスタムビューが画面に表示されている場合、そのスーパービューはそのビューへの参照を保持し、割り当てが解除されません。カスタムViewControllerにUINavigationControllerなどの親ViewControllerがある場合、その親ViewControllerはViewControllerへの参照を保持し、割り当てが解除されません。

  4. メソッドにブレークポイントを設定して、-buttonPressed:正しく呼び出されていることを確認します。次に、コードをステップ実行します。

  5. EXC_BAD_ACCESSの時点でのコールスタックを調べて、問題がどこにあるかをより適切に特定します。-buttonPressed:メソッドは実際に呼び出されていますか?

于 2012-07-22T22:47:25.590 に答える
0

わかりました、まず最初に。クラスに IBAction を追加するのはなぜですか? イベントを処理するためのアウトレットが必要なのはコントローラーだからです。このクラスは何ですか?

コントローラーでインスタンス化し (これをどのように接続したか正確にはわかりません)、それを有効にするために保持する必要があります。

これは単に悪い習慣です。アクションのロジックはコントローラー自体で処理する必要があります。これはコントローラーの機能であるため、アクションをコントローラーに接続することをお勧めします。

于 2012-07-22T22:13:50.650 に答える