NSString stringWithUTF8String附加错误

时间:2010-07-09 18:06:39

标签: cocoa nsstring

我正在尝试将char数组附加到NSString。当我使用下面的代码时,我收到此错误:

  

*********初始化方法-initWithCharactersNoCopy:length:freeWhenDone:无法发送到类NSCFString的抽象对象:创建具体实例!

这意味着什么以及如何解决?

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];

3 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的东西:

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

答案 1 :(得分:0)

我不会将字符串附加到另一个字符串,而是使用[NSString stringWithFormat:]

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

您甚至可以在一行中编写代码。

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

答案 2 :(得分:0)

您看到的错误是从发送-initWithString:到已经初始化的字符串。这是因为[NSString new]返回已初始化的字符串。如果需要特殊的init方法,则不能使用+ new。

  1. 对于-initWithString:消息,您需要分配NSString。这是导致异常错误的行,之后没有执行任何操作。但是,正如Carl指出的那样,你不需要为名称创建另一个对象,@“Name:”已经是一个NSString。

  2. + stringWithUTF8String:方法是一个类方法,所以直接将它发送到NSString类。

  3. 您可能希望在Allocating and Initializing Objects上查看Apple的objective-c文档。