NSMutableDictionary没有获取键/值对

时间:2010-10-02 12:33:19

标签: objective-c cocoa nsmutabledictionary

所以在这里,我被困在今天早上我的小项目最简单的部分(或者我想到的)。目标是构建一个简单的XML Parser,它接受他们遇到的每个元素并将其添加到最终将保存xml的所有键/值对的字典中。

所以像这样的xml

<xml>
  <1stTag>text</1stTag>
  <2ndTag>some more text</2ndTag>
</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为零,这里不是......任何想法?
一切看起来都不错,不是编译器错误或警告,它只返回Null。难倒,正如我所说......

1 个答案:

答案 0 :(得分:1)

在代码中的某处(可能在您的init方法中),您需要实例化NSMutableDictionary实例并将其分配给您的属性(如果您使用的是init方法,则将其分配给ivar)。像这样:

parsedXMLDict = [[NSMutableDictionary alloc] init];

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

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

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

如果您已经在执行上述操作,那么您可能已经在代码中早先发布了parsedXMLDict?在self.parsedXMLDict = nil方法之前,查找要调用parser: didEndElement: ...的地方。