2010-10-02 55 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

相關問題