0

私は明らかなことを理解しようとしてきましたが、要点を見逃しているか、見失っています。私の toggleStormButtons 関数に問題があり、XCode がそれを認識していませんか?

私のメインクラスでは、別のクラスで関数を呼び出すために次のものがあります。

STopLeftMenu *mTopLeft = [[STopLeftMenu alloc]init];    
[mTopLeft drawStormToggleButton];

次に、他のクラスには2つの機能があります。

- (void)toggleStormButtons{
    [UIButton animateWithDuration:0.50 animations:^{
        if (stormToggleBtn.transform.tx == 0){
            [stormToggleBtn setTransform:CGAffineTransformMakeTranslation(307, 0)];
            UIImage* hideButtonImg = [UIImage imageNamed:@"aiga_right_arrow_mod_hide_resize.png"];
            [stormToggleBtn setBackgroundImage:hideButtonImg forState:UIControlStateNormal];
        }
        else{
            [stormToggleBtn setTransform:CGAffineTransformMakeTranslation(0, 0)];
            UIImage* showButtonImg = [UIImage imageNamed:@"aiga_right_arrow_mod_show_resize.png"];
            [stormToggleBtn setBackgroundImage:showButtonImg forState:UIControlStateNormal];
        }
    }];

    for(UIView* storm in stormButtonSaves){
        [UIView animateWithDuration:0.50 animations:^{
            if (storm.transform.tx == 0){
                [storm setTransform:CGAffineTransformMakeTranslation(307, 0)];
                storm.alpha = .65;
            }
            else{
                [storm setTransform:CGAffineTransformMakeTranslation(0, 0)];
                storm.alpha = 0;
            }
        }];
    }
}

- (void)drawStormToggleButton{
    //Storm Pullout Toggle Button
    UIImage *buttonImageNormal = [UIImage imageNamed:@"aiga_right_arrow_mod_show_resize.png"];
    stormToggleBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 65, 75) ];
    [stormToggleBtn setBackgroundImage:buttonImageNormal forState:UIControlStateNormal];
    stormToggleBtn.backgroundColor = [UIColor clearColor];
    stormToggleBtn.alpha = 0.5;
    [stormToggleBtn addTarget:self action:@selector(toggleStormButtons) forControlEvents:UIControlEventTouchUpInside];
    [viewsToRemove addObject:stormToggleBtn];
    [mv addSubview:stormToggleBtn];
}

認識できないセレクタ メッセージが表示されるようです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ toggleStormButtons]: unrecognized selector sent to instance 0x7bc9ca0'
*** First throw call stack:
(0x1b9e012 0x1966e7e 0x1c294bd 0x1b8dbbc 0x1b8d94e 0x197a705 0x8ae2c0 0x8ae258 0x96f021 0x96f57f 0x96e6e8 0x8ddcef 0x8ddf02 0x8bbd4a 0x8ad698 0x2599df9 0x2599ad0 0x1b13bf5 0x1b13962 0x1b44bb6 0x1b43f44 0x1b43e1b 0x25987e3 0x2598668 0x8aaffc 0x2285 0x2185)
libc++abi.dylib: terminate called throwing an exception
4

2 に答える 2

2

STopLeftMenu の割り当て解除が早すぎるようです。ボタンはターゲットを保持しないため、ボタンのメッセージに応答する必要がある限り、このオブジェクトを保持する必要があります。オブジェクトの割り当てが解除される方法がわからない場合は、 Instruments でデバッグしてみてください。

于 2013-07-31T00:27:57.403 に答える
1

あなたが示したコードに問題はありません。私の既存のアプリで試してみましたが、a) UIButton ローカル変数を宣言し、b) ボタンに使用する画像を変更し、c) 内のものをコメントアウトする必要がありましたtoggleStormButtonsが、ボタンをタップするたびにメソッドが呼び出されました、 問題はありません。

ボタンのストレージを表示しません。ARCを使用していますか?ボタンstrongですか?ARCなら強いはず。ARC ではなく、 で割り当てるプロパティを使用していない場合、retain問題が発生する可能性があります。viewsToRemove は何をしますか? 配列のように見えますが、別のものである可能性があります。

+ buttonWithType:フレームを後で使用して設定しませんか?

于 2013-07-31T00:16:56.830 に答える