2012-02-22 154 views
0

我不明白爲什麼self.tmp的輸出爲空。無法追加字符串

這裏是我的代碼使用

[self.dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
{ 
    NSMutableString *t = [NSString stringWithFormat:@"%@ - %@", key, obj]; 
    [self.tmp appendString:t]; 
}]; 

NSLog(@"%@", self.tmp) --> print null; 

tmp被聲明爲NSMutableString

我可以確認dict ivar包含數據。

+0

'self.temp'在哪裏以及如何初始化? – sch 2012-02-22 15:28:01

+0

'self.tmp'的初始值是什麼? – dasblinkenlight 2012-02-22 15:28:22

回答

3

因爲self.tmp本身就是nil。你宣佈它,但你曾經設置它或最初分配?只有當你追加的東西是現有的字符串時,追加纔會有效。

在Objective-C中,如果您嘗試附加到nil對象,則不會看到錯誤,您只會看到您看到的結果,這是沒有任何事情發生。

就在你這裏張貼代碼,您可能要做到這一點:

self.tmp = [NSMutableString string]; 
+0

在上面描述的方案中,基於字典數據構建單個字符串的最佳方法是什麼? – foho 2012-02-22 15:30:34

+0

啊,明白了。謝謝 ! – foho 2012-02-22 15:32:17

0

你能否證實self.tmp != nil,然後再開始?

+0

不是它是零。 – foho 2012-02-22 15:32:42

+0

@foho:正如其他人更詳細地公佈ithan,這是你的問題的原因。 – JeremyP 2012-02-22 15:37:29

0

self.tmp未創建。 務必:

self.tmp = [NSMutableString new];

1

你需要讓你的伊娃TMP初始化和分配,請務必將其初始化爲@"",這就是爲什麼你可以有問題的唯一問題。你並不需要顯式地分配它,你可以使用自動釋放的對象調用了一些類的方法:

self.temp=[NSMutableString stringWithString:@""]; 

如果字符串被設置爲無,您要添加的東西到零,由於零能處理這種行爲,你會得到這個意想不到的結果。