2011-07-01 26 views
0

澄清問題在這裏。 我最初嘗試使用stringByAppendingString方法連接兩個字符串:連接方法中的Objective-C差異

NSString *dataString = @","; 
NSInteger i = 0; 
NSString *cycleCountString = @""; 
for (i = 0; i<[[self cycleList] count]; i++) { 

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i]; 
    [dataString stringByAppendingString:cycleCountString]; 
} 
NSLog(@"DataString is: %@",dataString); 

然而,NSLog的只是outputing「,」好像cycleCountString沒有被追加到dataString

閱讀後:HTTP://stackoverflow.com/questions/510269/how-do-i-concatenate-strings-in-objective-c,我能夠通過,而不是做一個stringWithFromat來解決這個問題:

NSString *dataString = @","; 
NSInteger i = 0; 
NSString *cycleCountString = @""; 
for (i = 0; i<[[self cycleList] count]; i++) { 

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i]; 
    dataString = [NSString stringWithFormat:@"%@%@",dataString,cycleCountString]; 


} 
NSLog(@"DataString is: %@",dataString); 

任何想法爲什麼以前的方法不工作? stringByAppendingString不按我認爲的方式工作嗎?

謝謝!

回答

3

你永遠不會更新dataString的值。

dataString = [dataString stringByAppendingString: cycleCountString]; 
+0

/捂臉。是的,就是這樣。謝謝! – hemlocker

+0

沒問題:)我總是想念這樣的東西。 –

1

NSString實例是不可變的 - 你不能改變它們。 stringByAppendingString:不會更改您的原始NSString實例,它將創建一個新的NSString並返回該實例。

新版本的工作原理是將stringWithFormat:的結果分配給dataString。你可以做的東西舊版本的工作是這樣的:在文檔

NSString *errorTag = @"Error: "; 
NSString *errorString = @"premature end of file."; 
NSString *errorMessage = [errorTag stringByAppendingString:errorString]; 

產生串

dataString = [dataString stringByAppendingString:cycleCountString]; 
1

示例「錯誤:文件過早結束」。

-1

因爲ü沒有agian分配給datastring

NSString *dataString = @","; 
NSInteger i = 0; 
NSString *cycleCountString = @""; 
for (i = 0; i<[[self cycleList] count]; i++) { 

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i]; 

    dataString=[dataString stringByAppendingString:cycleCountString];//this Line 
} 

NSLog(@"DataString is: %@",dataString); 

DataString是:,週期#0,週期#1,在週期#2,