Cocoa NSString stringWithUTF8String追加错误

Cocoa NSString stringWithUTF8String追加错误,cocoa,nsstring,Cocoa,Nsstring,我正在尝试将字符数组附加到NSString。当我使用下面的代码时,会出现以下错误: *********无法将初始化方法-initWithCharactersCopy:length:freeWhenDone:发送到类NSCFString:创建具体实例的抽象对象 这意味着什么?如何修复 NSString *str = [[NSString new] initWithString:@"Name: "]; NSString *name = [[NSString new] stringWithUTF8S

我正在尝试将字符数组附加到
NSString
。当我使用下面的代码时,会出现以下错误:

*********无法将初始化方法-initWithCharactersCopy: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];

我想你在找这样的东西:

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

我将使用
[NSString stringWithFormat::
,而不是向另一个字符串追加字符串

NSString *name = [NSString stringWithUTF8String:user.name];
str = [NSString stringWithFormat: @"Name: %@", name];
您甚至可以在一行中编写代码

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

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

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

  • +stringWithUTF8String:方法是一个类方法,因此直接将其发送到NSString类


  • 您可能需要在上查看Apple的objective-c文档。

    此外,请不要将new与其他init选择器一起使用。它基本上是一个alloc.init调用。