Ios5 NSXMLParser:foundCharacters';尝试使用appendString:';

Ios5 NSXMLParser:foundCharacters';尝试使用appendString:';,ios5,nsstring,nsxmlparser,nsmutablestring,Ios5,Nsstring,Nsxmlparser,Nsmutablestring,我在解析XML提要时遇到问题。每个父节点大约有15个子节点。目前,我正在使用stringbytrimmingchartersinset:然后是NSCharacterset Whitespace和NewLine characterset解析所有节点。 像这样: 这对于除一个节点外的所有节点都非常有效。对于这个节点,我希望文本按原样通过。我尝试设置一个if语句,以区别于其他节点来处理这个特定节点,因此我更新了以下内容 - (void) parser:(NSXMLParser *)parser fou

我在解析XML提要时遇到问题。每个父节点大约有15个子节点。目前,我正在使用stringbytrimmingchartersinset:然后是NSCharacterset Whitespace和NewLine characterset解析所有节点。 像这样:

这对于除一个节点外的所有节点都非常有效。对于这个节点,我希望文本按原样通过。我尝试设置一个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,为什么会抛出此错误

我试过看这个,这个也没用

我只想在“领养摘要”中加上“原样”,而其他14个都被删减了。我做错了什么?有什么建议吗


谢谢!

它的原因是
currentElementValue
声明为
NSString
。请将其类型更改为
NSMutableString

如果已使用NSMutableString声明此字符串,则还必须更改对象创建。更改以下代码:

currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
使用此代码:

currentElementValue = [[NSMutableString alloc] initWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
迅速处理alloc以避免内存泄漏

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

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

它实际上在my.h接口解析器中声明为NSMutableString:NSObject{KHMAppDelegate*app;List*theList;NSMutableString*currentElementValue;}属性NSString*testingString;-(id)初始化解析器;end@Apurvu,
currentElementValue=[[NSMutableString alloc]initWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
成功了!!非常感谢!这个项目正在使用ARC,我还需要手动解除锁定吗?(很抱歉提出了nOOb问题)再次感谢!不,这不是必需的。另外,接受答案。这样也可以帮助其他人。
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];