在NSString中附加换行符

时间:2009-11-09 08:11:58

标签: iphone objective-c nsstring

我有这个:

if (soapResults != nil) {
    soapResults = [soapResults stringByAppendingString:@"\n"];
    }

但我收到警告:

在构建时从不同的Objective-C类型分配。

当我在设备上运行时,我得到:

Program received signal: "EXC_BAD_ACCESS".

来自gdb。

如何在不收到警告或错误的情况下将换行符附加到NSString的任何想法?

任何帮助赞赏//:)

6 个答案:

答案 0 :(得分:16)

另一种选择是:[NSString stringWithFormat: @"%@\n", soapResults]即使逻辑相同!

但是,即使在stringByAppendingString的情况下,它也会返回一个新字符串,但它不会更改目标,因此您必须将新字符串分配给NSString类的新实例。

答案 1 :(得分:2)

你可以尝试这个,它对我有用:

NSString *content1 = [messageObject valueForKey:@"content"];
NSString *seprator = @"\n----------------------\n";
NSString *myString = [NSString stringWithFormat:@"%@\n%@\n",seprator,content1];
content = [content stringByAppendingString:myString];

`

答案 2 :(得分:2)

我发现\ r \ n在使用NSStrings时效果优于\ n。

所以:

NSString *stringWithNewLine = [soapResults stringByAppendingString:@"\r"];

答案 3 :(得分:1)

从-stringByAppendingString:返回的对象是自动释放的。如果您希望它保留,您必须保留它。如果您不保留它,则下次尝试访问时会出现内存异常。

确保发生这种情况的一种简单方法是将“soapResults”声明为属性,并为其合成访问器。

答案 4 :(得分:0)

您可能遇到内存管理问题,soapResults可能是指向已解除分配的对象的杂散指针。很难说没有看到更多代码,但是检查对象最初分配的位置是一个好的开始。

例如,如果它是通过[NSString stringWith ...]调用分配的,那么它默认是自动释放的,即它将在运行循环结束时释放,如果你想保留它你必须保留它对它。

答案 5 :(得分:0)

你正在使用正斜杠,这意味着它将忽略n,所以基本上你什么都没有。我相信这可能是个问题