2010-10-02 52 views
0

所以在这里我卡住了今天早上我的小项目的最简单的部分(或者我认为)。我们的目标是构建一个简单的XML解析器,它接受他们遇到的每个元素,并将其添加到最终将包含xml的所有键/值对的字典中。NSMutableDictionary不采取键/值对

所以这样

<xml> 
    <1stTag>text</1stTag> 
    <2ndTag>some more text</2ndTag> 
</xml> 

一个XML配置将在字典中结束了2键/值对:

{ 
1stTag:text; 
2ndTag:some more text; 
} 

采用的NSXMLParser框架我以为我只是存储每遇到元素和文本变量self.elementInProgress和self.textInProgress(都是NSStrings)。元素完成后,我会将这对添加到字典中。

因此,这里是.h文件:

@interface MSParser : NSObject <NSXMLParserDelegate> 
    { 
     NSString *elementInProgress; 
     NSString *textInProgress; 
     NSMutableDictionary *parsedXMLDict; 
    } 
@property (nonatomic, retain) NSString *textInProgress; 
@property (nonatomic, retain) NSString *elementInProgress; 
@property (nonatomic, retain) NSMutableDictionary *parsedXMLDict; 

而且在执行文件中的相应的功能:

@synthesize textInProgress,elementInProgress,parsedXMLDict;

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    [self.parsedXMLDict setValue:self.textInProgress forKey:self.elementInProgress]; 
    NSLog(@"%@",[self.parsedXMLDict valueForKey:self.elementInProgress]); 
} 

现在,在这里,我很难过,我的NSLog返回Null!我认为这是一个明智之举。我错过了什么?根据调试器,self.textInProgress和self.elementInProgress都被正确填充。我可以追踪到这一行,我称之为setValue ForKey,这又是根据文档,并已为我工作过一次以上。字典只是不采取值。根据文档,如果传递的setValue是零,那么它只会有趣,这里不是......任何想法?
这一切看起来不错,不是编译器错误或警告,它只是返回空值。正如我所说的,难倒了......

+0

你有没有设置你的elementInProgress和textInProgress值? – Eiko 2010-10-02 12:43:55

回答

1

在你的代码的某处(可能在你的init方法中),你需要实例化一个NSMutableDictionary实例并将它分配给你的属性(或者如果你在你的init方法中, 。类似这样的:

parsedXMLDict = [[NSMutableDictionary alloc] init]; 

如果您使用的方便构造返回自动释放对象,您还需要保留。

parsedXMLDict = [[NSMutableDictionary dictionaryWithCapacity:10] retain]; 

在这两种情况下,请确保您的某个地方有相应的版本,可能在您的dealloc中。

如果你已经在做上面的事情,那么你的代码早些时候你可能已经发布了parsedXMLDict了?寻找你在parser: didEndElement: ...方法之前拨打self.parsedXMLDict = nil的地方。

+0

就是这样。感谢mil!我应该亲眼看到那一个。哦,好吧; ;-)再次感谢 – karlmeier 2010-10-02 13:47:42

相关问题