1

ビューに動作を拒否するボタンがあります。X-Code の空白のデフォルト ビュー アプリケーションで作業しましたが、どのアプリケーションでも動作せず、代わりに次のエラーが表示されます。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '*** -[UIViewController showVicInfo:]: 認識されないセレクターがインスタンス 0x3c084f0 に送信されました'

デバッガーも役に立ちません。ボタンをファイルの所有者に接続することも確認しました (その逆ではありません)。以下は、アクションのコードです。そして、ブレークポイントがそこに到達していないため、それがアラート ビューではないことはわかっています。

約.h

    @interface about : UIViewController {

}

-(IBAction)showVicInfo:(id)sender;

約メートル

-(IBAction)showVicInfo:(id)sender {
    UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"You require an internet connection via WiFi or cellular network for iFirelert to work." delegate:self cancelButtonTitle:@"OK, thanks" otherButtonTitles:nil];
    [myAlert show];
    [myAlert release];
}

更新:参考までに、これがボタンの作成方法です。

  1. 新しいビューを作成しました (File>New File>UIViewControllerSubclass w/XIB for interface)
  2. -(IBAction)showInfo:(id)sender; を追加しました。about.hへ
  3. 追加した
  4. -(IBAction)showVicInfo:(id)sender { UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"インターネット接続がありません" メッセージ:@"iFirelert が機能するには、WiFi またはセルラー ネットワーク経由のインターネット接続が必要です。" delegate:self cancelButtonTitle:@"OK, ありがとう" otherButtonTitles:nil]; [myAlert ショー]; [myAlert リリース]; } ~ about.m
  5. Interface Builder で About.xib を開き、長方形のボタンをビューにドラッグします。
  6. ボタンを -showVicInfo アクションに接続するには、ctrl キーを押しながらファイルの所有者プロパティのボタンをクリックします (その逆ではありません)。
  7. ファイルの所有者が「about」クラスに設定されていることを確認しました。

そして、X-Codeで失敗してビルドおよび実行します。

更新 2: OK、既存のプロジェクトの設定または何かである必要があることがわかりました。別の X-Code プロジェクトで動作する 2 つのクラス ファイルと XIB ファイルをコピーしましたが、ボタンも同じものをスローします既存のアプリのエラー。

4

2 に答える 2

2

同じエラーが発生しました。問題は、viewController を解放したことです。

AnswerStructureViewController* questionVC = [[AnswerStructureViewController alloc] initWithOpts:dict];
[window addSubview:questionVC.view];
[questionVC release];

手放さなくても大丈夫

于 2010-10-31T23:56:26.170 に答える
1

Squeegy は正しいと思います。あなたの VC は単純な古い UIViewController であり、showVicInfo を受け入れません。

IB で ViewController のクラス (command-4) を設定しましたか?

または、自分で割り当てている場合は、次のようにしていますか?

vc = [UIViewController alloc];    // wrong class

これを行う必要がある場合:

vc = [about alloc];     

エラー メッセージは、showVicInfo が 0x3c084f0 に送信されたことを示しています。作成したView Controllerのアドレスを確認してください(上記の「vc」の値など)。答えが0x3c084f0の場合。もちろん、次回は値が異なる可能性がありますが、値を作成するときに NSLog を作成し、エラー メッセージと比較して、それが何を参照しているのかを確認してください。

IB でボタンが正しく接続されていることも確認してください。ボタンを選択して [ボタンの接続] タブに移動すると、接続が確立されているはずです。Touch Up Inside ではアクション関数に接続する必要があり、IB では showVicInfo に接続する必要があります。

于 2010-04-02T02:24:07.963 に答える