2011-11-15 17 views
1

下面的代碼追加到NSString對象時,爲什麼我的程序在3次追加後崩潰?

在.H ...

@interface Calculator2ViewController : UIViewController { 

    NSString *currentNumber; 
    bool buildingNumber; 
    NSMutableArray *arrayExpression; 
    IBOutlet UILabel *display; 

} 

在.M ...

-(NSString *) makeCurrentNumber{ 

    if(!currentNumber){ 
     currentNumber = [[NSString alloc] init]; 
     currentNumber = @""; 
    } 
    NSLog(@"Inside make makeCurrentNumber. The currentNumber is %@",currentNumber); 
    return currentNumber; 
} 



-(IBAction) digitPressed: (UIButton *)sender{ 

    NSString *digit = sender.titleLabel.text; 
    NSLog(@"The digit is: %@", digit); 
    if(!currentNumber) 
     currentNumber = @""; 
    currentNumber = [currentNumber stringByAppendingString:digit]; 
     NSLog (@"The string is: %@",currentNumber); 
    buildingNumber = YES; 
    }//end of digitPressed 

爲什麼經過3個追加我的程序崩潰?

+0

有沒有問題呢? –

+0

對不起,我的意思我程序崩潰後試圖追加一個字符串三次,我想知道錯誤是在我的代碼中。謝謝 – Dan

+0

只需發佈代碼沒有一個可以理解的問題不會讓人想回答你的問題在這裏SatckOverflow我們喜歡看到一些努力在問題中,你試過了什麼 – rckoenes

回答

2

currentNumber最初由makeCurrentNumber中的alloc-init保留。後來,你是一個自動保留值(從stringByAppendingString結果替換它的價值。加強與保留,你可能會得到更好的結果一致。

[...] 
if(!currentNumber) 
{ 
    [self makeCurrentNumber]; 
} 
currentNumber = [[currentNumber stringByAppendingString:digit] retain]; 
NSLog (@"The string is: %@",currentNumber); 
[...] 
+0

謝謝直到!它完美地工作,你的回答非常有意義。現在我可以繼續=) – Dan

+0

很高興我能幫上忙。請點擊附近的灰色複選標記以接受此答案。 – Till