Objective-C:如何将字符串附加到NSMutableString?

时间:2009-10-23 16:14:33

标签: objective-c

网址下载

  

http://code.google.com/p/mwiphonesdk/source/browse/#svn/trunk/iMADE/PrepTasks/08

我在上面链接的位置有代码,我使用 NSMutableString 在数据下载时追加字符串。但我发现使用appendString不会增加可变字符串的长度。我一定是做错了。

当我完成后,我需要将 NSMutableString 转换为 NSString 以返回它。我已经找到了这样做的例子,但我还没有看到。

我最熟悉Java和C#,其中有一个StringBuffer / StringBuilder,它允许你追加片段,它们只是在末尾调用toString来获得一个String。在Objective-C中看起来并不那么容易。

NSString* str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

#pragma mark TODO Confirm this is appending a value to the mutable string
[self.mutableString appendString:str];

NSLog(@"str length: %d, %d", [str length], [self.mutableString length]);

上面是调用appendString的代码部分。

我看到str的长度大于> 0但调用appendString不会增加self.mutableString的长度。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:7)

至于拥有NSMutableString*并且需要返回NSString*,前者是后者的子类,所以只要您看到NSString*NSMutableString*就足够了-is。

您的代码看起来没问题。我唯一能想到的是,初始化str变量时可能没有任何数据可言。在这种情况下,附加一个空字符串将对mutableString无效。

您还需要确保self.mutableString已正确分配和初始化。您可以向NSObject*发送nil的消息,[self.mutableString length]返回0时可能会产生误导。

答案 1 :(得分:3)

我已经解决了这个问题。我只是没有初始化NSMutableString值,它透明地没有做任何事情。

在附加字符串之前,我输入以下代码。

if (_mutableString == nil){
    _mutableString = [[NSMutableString alloc] init];
}

感谢大家的回答。很高兴知道我可以使用NSMutableString代替NSString。 (太容易了):)