0

エントリごとにボタンをスクランブルするピンパッドクラスがあります。クラスは個別のプロジェクトとして完全に機能しますが、特定のプロジェクトに追加すると[__NSCFSet stringByAppendingFormat:]: unrecognized selector sent to instanceメッセージが表示されます。そのメッセージをトリガーするメソッドは次のとおりです。

-(void)touchedButtonInCell:(id)sender
{
    // Obtain the current number string entered from the pinpad.
    _pinpadNumber = [_pinpadNumber stringByAppendingFormat:@"%i", [sender tag]];

    // Verification of values
    NSLog(@"%i", [sender tag]);
    NSLog(@"%@", _pinpadNumber);

    // Check the entry of the PINPAD_NUMBER_LENGTH character/number
    if ([_pinpadNumber length] >= PINPAD_NUMBER_LENGTH)
    {
        // Trigger delegate method to handle the pin pad number received.
        if ([_delegate respondsToSelector:@selector(receivedPinPadNumber:)])
        {
            [_delegate receivedPinPadNumber:_pinpadNumber];
        }
        // Reset the contents of the pin pad number string
        _pinpadNumber = @"";
    }

    // Ensure all elements are scrambled for next number entry.
    [self scramblePinpadGridView];
}

一番上の_pinpadNumber=[_pinpadNumber行にコメントすると、適切な値が出力されます。行のコメントを外すと、最初にしか機能せず、2番目のボタンを押すとクラッシュします。

私はこれに2日以上苦労しています。誰かがこれに光を当ててくれることを本当に望んでいます。

4

1 に答える 1

2

まず、コードをビルドして分析します。識別されたエラーを修正します。

次に、おそらくARCとこの行を使用していません...

_pinpadNumber = [_pinpadNumber stringByAppendingFormat:@"%i", [sender tag]];

... 自動解放されたオブジェクトを に割り当てています_pinpadNumber。最初の実行で_pinpadNumberは、可能性がありnilます (たとえば、別の場所に初期化していない限り@""、有効なオブジェクトである可能性があります。

次のパスでは、自動解放されたオブジェクトがプールとブームから排出され、表示されたエラーでアプリがクラッシュします。

ゾンビ検出をオンにすると、ゾンビ メッセージが表示される可能性があります。

于 2012-09-13T19:20:08.023 に答える