2012-09-13 129 views
0

我有一個pinpad類,每次輸入後都會對它上面的按鈕進行加擾。該課程作爲一個單獨的項目完美工作,但是當添加到特定項目時,我會收到一條[__NSCFSet stringByAppendingFormat:]: unrecognized selector sent to instance消息。這裏是一個觸發消息的方法:[__NSCFSet stringByAppendingFormat:]:發送到實例的無法識別的選擇器

-(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

也運行「分析」下找到產品菜單,看看它是否指出了一些內存問題。幾乎肯定_pinpadNumber不被保留,其獲得發佈,並且操作系統稍後將使用該NSSet的某個內存位置。 –

+0

好吧,所以當運行殭屍我得到這個:*** - [CFString stringByAppendingFormat:]:發送到釋放實例的消息。我仍然不明白爲什麼它會釋放字符串實例。我不會在任何地方釋放它。 –

回答

2

首先,構建並分析你的代碼。修復所發現的錯誤。

接下來,你可能不會使用ARC和這條線......

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

...被分配一個自動釋放的對象_pinpadNumber。在第一次執行,_pinpadNumber可能nil(除非你初始化它,比方說,@""別的地方 - 它可能是一個有效的對象

在下關,即自動釋放的對象已經排出池和熱潮,您的應用程序崩潰,你看到的錯誤。

你可以打開的殭屍檢測並有可能看到一個殭屍消息。

相關問題