0

我有一个 pinpad 类,每次输入后都会对其上的按钮进行打乱。该类作为一个单独的项目可以完美地工作,但是当添加到一个特定的项目时,我会收到一条[__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 行,它会打印适当的值。当我取消注释该行时,它只在第一次工作,并在触摸第二个按钮时崩溃。

我已经为此苦苦挣扎了两天多。我真的希望有人可以对此有所了解。

4

1 回答 1

2

首先,构建和分析您的代码。修复发现的任何错误。

接下来,您可能没有使用 ARC 和这条线......

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

...正在将一个自动释放的对象分配给_pinpadNumber. 在第一次执行时,_pinpadNumber很可能nil(除非你将它初始化到@""其他地方——它可能是一个有效的对象。

在下一次通过时,自动释放的对象已从池中排出并繁荣,您的应用程序因您看到的错误而崩溃。

您可以打开僵尸检测并可能会看到僵尸消息。

于 2012-09-13T19:20:08.023 回答