1

同じアプリの異なる実行で同じアクションが異なるエラーをスローする、この応答を見たことがありません。

ボタンをクリックするとエラーをスローする NSViewController サブクラスにボタン (送信者をログに記録するだけ) の IBAction があります (これは OSX アプリです)。私はこれらを取得しています(これまでのところ):

-[NSArrayM buttonClick:]: unrecognized selector sent to instance
-[__NSCFDictionary buttonClick:]: unrecognized selector sent to instance
-[__NSCFSet buttonClick:]: unrecognized selector sent to instance
-[NSRunLoop buttonClick:]: unrecognized selector sent to instance

そして、恐ろしいEXC_BAD_ACCESS。

このテスト アプリの唯一のコードは、View Controller をインスタンス化するためのアプリ デリゲートの次のコードです。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    TestController *controller = [[TestController alloc] initWithNibName:@"TestController" bundle:nil];
    [self.window.contentView addSubview:controller.view];
}

そして、View Controller サブクラスのこの IBAction:

-(IBAction)buttonClick:(id)sender {
    NSLog(@"%@",sender);
}

ビュー コントローラーに実装されている IBAction は、IB で (ファイルの所有者を介して) そのビューにあるボタンに接続されます。

このような単純なプログラムで、どうしてこれほど多くの異なるエラー メッセージが表示されるのか理解できません。これは、View Controller がレスポンダー チェーンに含まれていないことに問題があるのでしょうか? もしそうなら、なぜそれはエラーをスローする必要がありますか?

コントローラーのビューでコントローラーを次のレスポンダーとして設定しようとしましたが ([controller.view setNextResponder:controller]; を使用)、起動時に EXC_BAD_ACCESS エラーが発生するだけです。

4

1 に答える 1

0

わかりました、MacScripter の Shane Stanley からのポインターでこれを修正しました (ApplescriptObjC で別のバージョンを作成して、そこで質問をしましたが、そのバージョンは機能しました)。これはメモリ管理の問題です。ARC を使用していると、忘れがちです。IBAction を送信する前に、TestController インスタンスの割り当てが解除されていました。割り当て解除されたオブジェクトにメッセージを送信すると、何かを指す可能性があるため、これは変数エラー メッセージを説明します。この問題は、TestController インスタンスである controller のプロパティを (retain として) 宣言することで修正されました。

于 2012-06-03T02:57:35.997 に答える