-1

解析 XML 提要时出现问题。每个父节点大约有 15 个子节点。目前我正在使用 stringbytrimmingchartersinset 解析所有节点:然后是 NSCharacterset whitespaceandnewline 字符集。像这样:

- (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 生成 SIGABRT 错误,并且这个错误:'Attempt to mutate immutable object with appendString:' -但无济于事。

我只想“AdoptionSummary”附加“原样”,而其他 14 个被修剪。我做错了什么?有什么建议吗?

谢谢!

4

2 回答 2

1

因为currentElementValue被声明为NSString. 将其类型更改为NSMutableString.

如果你已经用 NSMutableString 声明了这个字符串,那么你也必须改变对象的创建。更改以下代码:

currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

使用此代码:

currentElementValue = [[NSMutableString alloc] initWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];

快速处理 alloc 以避免内存泄漏。

于 2012-08-06T17:40:00.470 回答
0
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

简单地将 NSString 转换为 NSMutableString 并不能使其成为一体。在修改它之前制作一个可变副本。

于 2012-08-06T17:45:16.720 回答