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?