1

私のアプリには、.h ファイルで既に宣言されているインスタンス変数であるボタンがあります。ターゲットに割り当てを割り当てて実際にボタンを押すと、アプリがクラッシュし、デバッガーに次の出力が表示されます。

-[__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");

}

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

4

3 に答える 3

5

コードの残りの部分を確認せずに特定することは困難selfですが、正しく保持されていません。

ボタンを正しく設定し (私が見る限り)、ターゲットを に向けselfます。残念ながら、ボタンを押すselfまでに範囲外になり、同じメモリが によって使用されますNSString。メッセージに文字列を送信すると、iOS は驚きhandleActionSheet:ます。

于 2012-05-04T16:20:18.197 に答える
1

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

そのメッセージを検索して、メッセージを受信するオブジェクトがNSString.

于 2012-05-04T15:58:47.317 に答える
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");
}
于 2012-05-04T16:11:43.140 に答える