2012-05-04 18 views
1

私のアプリでは、すでに.hファイルで宣言されているインスタンス変数であるボタンがあります。 は今までターゲットに割り当てると、実際にボタンを押すと、それを割り当てた後、アプリのクラッシュは私のデバッガで次の出力を与える:UIButton呼び出しセレクタがアプリケーションをクラッシュする

-[__NSCFString handleActionSheet:]: unrecognized selector sent to instance 0x9090330 
2012-05-04 17:51:02.646 financeAppV2[2595:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString handleActionSheet:]: unrecognized selector sent to instance 0x9090330' 
*** First throw call stack: 
(0x13d1022 0x1562cd6 0x13d2cbd 0x1337ed0 0x1337cb2 0x13d2e99 0x1e14e 0x1e0e6 0xc4ade 0xc4fa7 0xc3d8a 0x2dfa1a 0x13a599e 0x133c640 0x13084c6 0x1307d84 0x1307c9b 0x12ba7d8 0x12ba88a 0x1b626 0x29dd 0x2945) 
terminate called throwing an exceptionCurrent language: auto; currently objective-c 

私のコードは次のようになります。

saveButton=[UIButton buttonWithType:UIButtonTypeCustom]; 
[saveButton setBackgroundImage:[UIImage imageNamed:@"intervalbutton"] forState:UIControlStateNormal]; 
[saveButton setBackgroundImage:[UIImage imageNamed:@"intervalbuttonpressed"] forState:UIControlStateHighlighted]; 
saveButton.alpha=.8; 
saveButton.frame= frame; 
UILabel* label=[[UILabel alloc]initWithFrame:CGRectMake(0, 2, saveButton.frame.size.width, 21)]; 
[saveButton addSubview:label]; 

[saveButton addTarget:self action:@selector(handleActionSheet:) forControlEvents:UIControlEventTouchDown]; 

[self.view addSubview:saveButton]; 


-(void)handleActionSheet:(id)sender{ 
NSLog(@"working"); 

}

アプリがクラッシュする可能性がある理由はありますか?

+0

あなたは '[saveButton addSubview:label];'をコメントアウトしてもそれが起こりますか? – Costique

+0

はい、あります。実際には、私はさらに奇妙なエラーが発生します: - [_ UITableViewSeparatorView handleActionSheet:]:インスタンスに送信された認識できないセレクタ0x6a89a30 2012-05-04 18:12:52.485 financeAppV2 [2997:f803] ***キャッチされない例外'NSInvalidArgumentException'、理由: ' - [_ UITableViewSeparatorView handleActionSheet:]:未認識セレクタインスタンス0x6a89a30に送ら' (0x13d1022 0x1562cd6 0x13d2cbd 0x1337ed0 0x1337cb2 0x13d2e99 0x1e14e 0x1e0e6 0xc4ade 0xc4fa7 0xc3d8a 0x2dfa1a 0x13a599e 0x133c640 0x13084c6 0x1307d84 0x1307c9b 0x12ba7d8 ***まずスローコールスタック0x12ba88a 0x1 ... – iJatrat

答えて

5

を設定されていないフレームは、それが具体的には困難だが、selfが正しく保持されていません。

ボタンを正しく設定して、ターゲットをselfに設定してください。残念ながら、ボタンを押すまでにselfが範囲外になり、同じメモリがNSStringによって使用されています。 handleActionSheet:という文字列を送信すると、iOSが驚いてしまいます。

+0

「自己」が正しく保持されていないことを示すものは何ですか?他にもいくつかありますよね? – mbm29414

+0

ステファンありがとう!私は実際にあなたの指導で何がうまくいかなかったかを見つけました。 ボタンが配置されたビューコントローラはインスタンス変数ではありませんでした。だから、私はARCがそれを早くリリースしたと思うのです。私はそのviewcontrollerのプロパティを作って、それは働いた!どうもありがとう! – iJatrat

1

というメッセージを__NSCFStringオブジェクト(おそらくNSString)に送信しています。

メッセージを検索して、メッセージを受信したオブジェクトがNSStringである理由を理解しようとします。

+0

私はちょうど投稿を編集し、呼び出す別のセレクターを入れましたが、同じエラーメッセージが表示されますが、代わりに更新されたセレクターが表示されます。 UIButton – iJatrat

+1

オブジェクトが突然 "タイプを変更する"ときはいつも、あなたはそのオブジェクトを過剰にリリースし、メモリが何か他のものによって再利用されていることを示します。コードにブレークポイントを設定し、** [selfビュー]に追加する前に 'saveButton' **のメモリアドレスを確認してください。少なくとも例外がスローされた同じメモリアドレスかどうかを確認してください。もしそうなら、あなたは追跡するメモリバグを持っています! – mbm29414

+0

ありがとう!確かめます。 – iJatrat

0

コードをテストしただけで動作します。多分それが適切にあなたのコードの残りの部分を見ることなく

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIButton *saveButton = [[UIButton alloc] init]; 
    saveButton=[UIButton buttonWithType:UIButtonTypeCustom]; 
    [saveButton setBackgroundImage:[UIImage imageNamed:@"intervalbutton"] forState:UIControlStateNormal]; 
    [saveButton setBackgroundImage:[UIImage imageNamed:@"intervalbuttonpressed"] forState:UIControlStateHighlighted]; 
    saveButton.alpha=.8; 
    saveButton.frame= CGRectMake(5, 5, 200, 40); 
    UILabel* label=[[UILabel alloc]initWithFrame:CGRectMake(0, 2, saveButton.frame.size.width, 21)]; 
    label.text = @"Hello"; 
    [saveButton addSubview:label]; 

    [saveButton addTarget:self action:@selector(handleActionSheet:) forControlEvents:UIControlEventTouchDown]; 

    [self.view addSubview:saveButton]; 

} 

-(void)handleActionSheet:(id)sender{ 
    NSLog(@"working"); 
} 
+0

あなたのテストに感謝します。問題は、アプリをiPadに移植し、実際にiPhone上で動作していたコードを単純にコピーしたことです。しかし、突然それは動作を停止しました。 – iJatrat

+0

フレームの設定に失敗しても、オブジェクトが早期に割り当て解除されることはありません。 –

関連する問題