0

この方法でbuttonCancelが押されたときにメソッドを呼び出そうとしています:

+ (DejalActivityView *)activityViewForView:(UIView *)addToView withLabel:(NSString *)labelText width:(NSUInteger)aLabelWidth;
{
// Immediately remove any existing activity view:
if (dejalActivityView)
    [self removeView];

// Remember the new view (so this is a singleton):
dejalActivityView = [[self alloc] initForView:addToView withLabel:labelText width:aLabelWidth];

buttonCancel = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[buttonCancel addTarget:self
                 action:@selector(callCancelAlert:)
       forControlEvents:UIControlEventTouchDown];
[buttonCancel setTitle:@"Cancel upload" forState:UIControlStateNormal];
buttonCancel.frame = CGRectMake(250, 560, 300, 40);
[addToView addSubview:buttonCancel];
[buttonCancel setImage:[UIImage imageNamed:@"socialize-navbar-bg.png"] forState:UIControlStateNormal];

return dejalActivityView;
}

と方法

 -(IBAction)callCancelAlert:(id)sender{

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle: @"Announcement"
                      message: @"It turns out that you are playing Addicus!"
                      delegate: nil
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil];
[alert show];
//[alert release];
}

次のエラーが表示されます。

'NSInvalidArgumentException', reason: '+[DejalBezelActivityView callCancelAlert:]: unrecognized selector sent to class 0x3184e4' * First throw call stack: (0x327862a3 0x3a61f97f 0x32789ca3 0x32788531 0x326dff68 0x346790c5 0x34679077 0x34679055 0x3467890b 0x3467859b 0x345a1523 0x3458e801 0x3458e11b 0x362805a3 0x362801d3 0x3275b173 0x3275b117 0x32759f99 0x326ccebd 0x326ccd49 0x3627f2eb 0x345e2301 0x39445 0x3aa56b20) libc++abi.dylib: 例外をスローして呼び出された終了

そしてアプリが落ちる。

4

1 に答える 1

3

最初のメソッドはクラス メソッド (+) であり、インスタンス メソッド (-) ではないため、クラス コンテキストにいます。

あなたが書くとき

[buttonCancel addTarget:self
                 action:@selector(callCancelAlert:)
       forControlEvents:UIControlEventTouchDown];

self は、クラス インスタンス (create by および alloc & init メッセージなど) ではなく、クラス自体を指します。

同じメソッドでインスタンスを割り当てるので、DejalActivityViewこれを行う必要があります。

[buttonCancel addTarget:dejalActivityView
                 action:@selector(callCancelAlert:)
       forControlEvents:UIControlEventTouchDown];
于 2013-03-11T18:54:34.203 に答える