解析XML Feed时遇到问题。每个父节点大约有15个子节点。目前我正在使用stringbytrimmingchartersinset解析所有节点:然后NSCharacterset whitespaceandnewline characterset。 像这样:
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
这适用于除一个节点之外的所有节点。对于此节点,我希望文本按原样通过。我已经尝试设置一个if语句来区别对待这个特定节点,所以我更新到以下内容。
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([testingString isEqualToString:@"AdoptionSummary"]) {
[currentElementValue appendString:string]; //This keeps breaking
}
else {
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
然而我收到了一个错误。
***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'尝试使用appendString改变不可变对象:'
如果我使用stringbytrimmingchartersinset和appendString的组合,则只会出现错误。但是,如果我使用stringbytrimmingchartersinset或appendString,那么它会自动解析而不会出错。 currentElementValue
是一个NSMutableString,为什么会抛出这个错误?
我已尝试查看此NSMutableString appendString generates SIGABRT Error,此error : 'Attempt to mutate immutable object with appendString:' --但无济于事。
我想只是'AdoptionSummary'追加'原样',而另外14个被修剪。我做错了什么?有什么建议吗?
谢谢!
答案 0 :(得分:1)
因为currentElementValue
被声明为NSString
。将其类型更改为NSMutableString
。
如果已使用NSMutableString声明此字符串,则还必须更改对象创建。更改以下代码:
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
使用此代码:
currentElementValue = [[NSMutableString alloc] initWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
快速处理alloc以避免内存泄漏。
答案 1 :(得分:0)
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
简单地将NSString强制转换为NSMutableString不会使其成为一个NSString。在修改之前制作一个可变副本。