我有这个:
if (soapResults != nil) {
soapResults = [soapResults stringByAppendingString:@"\n"];
}
但我收到警告:
在构建时从不同的Objective-C类型分配。
当我在设备上运行时,我得到:
Program received signal: "EXC_BAD_ACCESS".
来自gdb。
如何在不收到警告或错误的情况下将换行符附加到NSString的任何想法?
任何帮助赞赏//:)
答案 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,所以基本上你什么都没有。我相信这可能是个问题