繁体   English   中英

如何附加字符串nsxml解析器iphone sdk?

[英]How to append a string nsxml parser iphone sdk?

我正在解析一个rss,我想附加一个字符串,这里是一些代码。 我的应用程序崩溃了,这就是NSLogged。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendFormat:'

我要附加一个nsmutablestring

  -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

  //     [data appendFormat:(NSMutableString *)string]; this doesn't work either
  [data appendFormat:string]; 
data = (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

 }

为什么我的应用程序被欺骗了,我该怎么解决?

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


 [data appendFormat:string];
 [data autorelease];
 data = [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];

}

NSString指针转换为NSMutableString指针不会使基础对象可变。 您可能使编译器认为它可以工作,但是却无法欺骗运行时。 NSStringNSMutableString是以不同的野兽开头的,因此您不能四处走动,接受不可变的字符串,并假装它是可变的。 因此,您的应用程序崩溃了。 (相反,将NSMutableString转换为NSString的方法是可行的,因为您限制了对对象的可能操作集。您始终可以将对象转换为限制性更强的形式,但很少将其转换为其他形式。 )

您需要使用实际的NSMutableString对象。 获取不可变字符串的可变表示的最简单方法是使用mutableCopy实例方法。 (不要忘了随手释放对象。)

[data appendFormat:string]; 
[data autorelease];
data = [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM