だからここで私は今朝の私の小さなプロジェクトの最も単純な部分(またはそう思った)で立ち往生しています。目標は、遭遇したすべての要素を取得して、最終的に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の両方が、デバッガーに従って正しく入力されます。私はそれをこの行までたどることができます。ここでsetValueForKeyを呼び出します。これもドキュメントに従っており、以前に何度も機能しました。辞書は値を取りません。ドキュメントによると、渡されたsetValueがnilの場合、それはおかしな動作をするだけですが、ここではそうではありません...何かアイデアはありますか?
コンパイラのエラーや警告ではなく、すべて良さそうです。Nullを返すだけです。私が言ったように、困惑しました...