NSMMLParser的NSMutableString问题

时间:2009-08-24 00:39:54

标签: objective-c cocoa-touch

我对此有一段时间 - 我正在尝试解析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”?

1 个答案:

答案 0 :(得分:1)

-setString:是一个实例方法,而不是类方法。如果您已经将一个有效的NSMutableString对象分配给contentsOfCurrentXMLProperty并且只想清除它,那么:

contentsOfCurrentXMLProperty = [NSMutableString setString:@""];

应该是

[contentsOfCurrentXMLProperty setString:@""];

另一方面,如果你想为contentsOfCurrentXMLProperty分配一个新对象,这是一个有效的方法:

self.contentsOfCurrentXMLProperty = [NSMutableString stringWithCapacity:0];