【问题标题】:NSString stringWithUTF8String appending errorNSString stringWithUTF8String 附加错误
【发布时间】:2010-07-09 18:06:38
【问题描述】:

我正在尝试将 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];

【问题讨论】:

    标签: cocoa nsstring


    【解决方案1】:

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

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

    【讨论】:

    • 另外,请不要将 new 与其他初始化选择器一起使用。它基本上是一个 alloc.init 调用。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      您可能需要在Allocating and Initializing Objects 上查看 Apple 的 Objective-c 文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多