NSMutableDictionary 不采用键/值对

Posted

技术标签:

【中文标题】NSMutableDictionary 不采用键/值对【英文标题】:NSMutableDictionary not taking key/value pair 【发布时间】:2010-10-02 12:33:18 【问题描述】:

所以今天早上我被困在我的小项目中最简单的部分(或者我是这么想的)。目标是构建一个简单的 XML 解析器,它将遇到的每个元素添加到字典中,该字典最终将保存 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 为 nil 时,它才会表现得有趣,这不是……有什么想法吗? 一切看起来都不错,不是编译器错误或警告,它只是返回 Null。难倒,正如我所说的......

【问题讨论】:

您是否设置过 elementInProgress 和 textInProgress 值? 【参考方案1】:

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

parsedXMLDict = [[NSMutableDictionary alloc] init];

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

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

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

如果您已经在执行上述操作,那么您可能已经在代码的前面部分发布了 parsedXMLDict?查找您调用 self.parsedXMLDict = nil 的位置,这些位置在您的 parser: didEndElement: ... 方法之前被调用。

【讨论】:

就是这样。谢谢一米!我应该亲眼看到那个。哦,好吧.. ;-) 再次感谢

以上是关于NSMutableDictionary 不采用键/值对的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?

当键看起来像一个 int 时如何访问 NSMutableDictionary?

按字典键的值对包含 NSMutableDictionary 的 NSMutableArray 进行排序

如何使用键将对象添加到 NSMutableDictionary?

NSMutableDictionary 的 NSMutableArray 具有多个键,数据结构

如何从 nsmutabledictionary 中删除键当该键的值在 ios 中为空或 null 时?