2010-07-09 57 views
1

我試圖追加一個字符數組到NSString。當我使用下面的代碼時,出現此錯誤:NSString stringWithUTF8String追加錯誤

********* initialization method -initWithCharactersNoCopy:length:freeWhenDone: cannot be sent to an abstract object of class NSCFString: Create a concrete instance!

這是什麼意思?怎麼修復?

NSString *str = [[NSString new] initWithString:@"Name: "]; 
NSString *name = [[NSString new] stringWithUTF8String:user.name]; 
//NSString *name = [[NSString stringWithUTF8String:seg.segname] copy]; //this also failed 
str = [str stringByAppendingString:name]; 

回答

2

我認爲你在尋找這樣的事情:

NSString *str = @"Name: "; 
NSString *name = [NSString stringWithUTF8String:user.name]; 
str = [str stringByAppendingString:name]; 
+0

另外,請不要在其他init選擇器中使用new。它基本上是一個alloc.init調用。 – Peteee24 2013-11-12 10:00:54

0

而是附加一個字符串到其他的,我會用[NSString stringWithFormat:]

NSString *name = [NSString stringWithUTF8String:user.name]; 
str = [NSString stringWithFormat: @"Name: %@", name]; 

你甚至可以在一行寫代碼。

str = [NSString stringWithFormat: @"Name: %@", [NSString stringWithUTF8String:user.name]]; 
0

您所看到的錯誤來自將-initWithString:發送到已經初始化的字符串。這是因爲[NSString new]返回已經初始化的字符串。如果您需要特殊的init方法,則不能使用+ new。

  1. 對於-initWithString:消息,您需要分配NSString。這是導致異常錯誤的行,並且沒有任何事後正在執行。但是,正如Carl指出的那樣,您不需要爲該名稱創建另一個對象,@「Name:」已經是一個NSString。

  2. + stringWithUTF8String:方法是一個類方法,所以直接發送給N​​SString類。

您可能想要查看關於Allocating and Initializing Objects的Apple客觀文檔。