2011-08-09 46 views
0

我有一種情況,我想分配一個NSString對象,並在if-else塊內分配文本。當我寫這樣的代碼:當初始化NSString時分離alloc和init

NSString *string = [NSString alloc]; 
if (firstCase) 
    [string initWithString:@"firstCase"]; 
else if(secondCase) 
    [string initWithString:@"secondCase"]; 
[self someFunction:string]; 

我得到的someFunction內部的錯誤(當我嘗試使用string拋出NSInvalidArgumentException)。 此外,當我通過我的執行代碼,一旦我進入someFunction,控制檯會產生這樣一行:

你忘了窩的alloc和init?

這是指string

我試過同樣的事情使用一個NSMutableString,只是做string = [[NSMutableString alloc] init],只是追加到每個if-else塊中的字符串,但我想知道是否有人知道爲什麼以前的方式不會產生相同的結果。

回答

0

是否有可能遇到您不符合您的要求if和else的情況?你可能想仔細檢查你的案例是什麼......或者你可能想要將你的字符串默認爲「」。 編輯:然後你可以添加到字符串你已經宣佈它使用stringByAppendingString

NSString *string = [[NSString alloc] initWithString:@""]; 
if(case1) 
    [string stringByAppendingString:@"desired string"]; 
elseif(case2) 
    [string stringByAppendingString:@"other string"]; 

這裏是蘋果的NSString類參考的鏈接一定值後: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

+0

到目前爲止,我總是進入if-else。如果我將字符串初始化爲@「」,那麼我不能在if-else塊中再次更改它嗎?或者這樣做是合法的: NSString * string = [NSString alloc] initWithString:@「」]; if(case1) [string initWithString:@「case1」] – Vince613

+0

@ Vince613看看編輯 - 你總是可以附加到字符串。我不會在if中聲明你的字符串,因爲變量的範圍在if和else之內,如果這會導致更多的問題。 – Matt

+0

你說的只存在於if-else塊中的變量範圍我認爲正是我的問題所在。我還沒有在編輯中嘗試過你的解決方案,但它看起來是可行的。謝謝您的幫助! – Vince613