[__NSCFSet stringByAppendingFormat:]:发送到实例的无法识别的选择器

时间:2012-09-13 18:57:21

标签: objective-c ios nsstring

我有一个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行,它会打印相应的值。当我取消注释该行时,它仅在第一次工作时,并且在第二个按钮上触发时崩溃。

我一直在为此争吵两天多一点。我真的希望有人能为此带来一些启示。

1 个答案:

答案 0 :(得分:2)

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

接下来,你可能没有使用ARC和这一行......

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

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

在下一次传递中,该自动释放的对象已从池中耗尽并 boom ,您的应用程序因您看到的错误而崩溃。

您可以启用僵尸检测,并可能会看到僵尸消息。