我对此有一段时间 - 我正在尝试解析XML文件并在NSMutableString变量中设置文本,以便稍后填写标签的文本,如下所示。
在我的.h中,我有以下(简化);
NSMutableString *contentsOfCurrentXMLProperty;
@property (nonatomic,retain) NSMutableString *contentsOfCurrentXMLProperty;
在我的.m:
-(void) parseData {
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:myData];
[parser setDelegate:self];
[parser parse];
[parser release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"Title"]) {
NSLog(@"FOUND TITLE!");
contentsOfCurrentXMLProperty = [NSMutableString setString:@""];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"TITLE"]) {
myLabel.text = [contentsOfCurrentXMLProperty stringByReplacingOccurrencesOfString:@"[br]" withString:@"\n"];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[self.contentsOfCurrentXMLProperty appendString:string];
}
当我运行我的应用程序时,数据会被正确下载和解析。当观察员再次发射事件时,我遇到了问题。调用parseData方法,我得到一个错误,我已追溯到以下行:“contentsOfCurrentXMLProperty = [NSMutableString setString:@”“]; “
创建或初始化NSMutableString变量以供我反复使用的正确方法是什么?何时/哪里是发布它的最佳地点?我如何基本清除变量,以便当观察者触发parseData方法时,它将再次能够设置“contentsOfCurrentXMLProperty”?
答案 0 :(得分:1)
-setString:是一个实例方法,而不是类方法。如果您已经将一个有效的NSMutableString对象分配给contentsOfCurrentXMLProperty并且只想清除它,那么:
contentsOfCurrentXMLProperty = [NSMutableString setString:@""];
应该是
[contentsOfCurrentXMLProperty setString:@""];
另一方面,如果你想为contentsOfCurrentXMLProperty分配一个新对象,这是一个有效的方法:
self.contentsOfCurrentXMLProperty = [NSMutableString stringWithCapacity:0];