2010-10-02 3 views
0

поэтому здесь я застрял в самой простой части (или так я думал) о моем маленьком проекте для этого утра. Цель заключалась в создании простого XML-анализатора, который берет каждый элемент, с которым они сталкиваются, и добавляет его в словарь, который в конечном итоге удерживает все пары ключ/значение xml.NSMutableDictionary не принимает ключ/значение пара

Так XML-как этот

<xml> 
    <1stTag>text</1stTag> 
    <2ndTag>some more text</2ndTag> 
</xml> 

бы в конечном итоге в словаре с 2 парами ключ/значение:

{ 
1stTag:text; 
2ndTag:some more text; 
} 

внедряющих NSXMLParser Framework Я думал, что я просто хранить каждый сталкивался элемент и тексты в переменных 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. Столбик, как я сказал ...

+0

Вы когда-либо устанавливали значения elementInProgress и textInProgress? – Eiko

ответ

1

Где-то в вашем коде (возможно, в вашем методе init) вам нужно создать экземпляр экземпляра NSMutableDictionary и присвоить его свойству (или ivar, если вы в методе init) , Что-то вроде этого:

parsedXMLDict = [[NSMutableDictionary alloc] init]; 

Если вы используете конструкцию удобства, которая возвращает объект autoreleased, вам также необходимо сохранить.

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

В любом случае убедитесь, что у вас есть соответствующий релиз где-нибудь, возможно, в вашем dealloc.

Если вы уже делаете это, возможно, вы уже выпустили parsedXMLDict ранее в своем коде? Ищите места, где вы звоните self.parsedXMLDict = nil, которые вызываются до вашего метода parser: didEndElement: ....

+0

Вот и все. спасибо, мил! Я должен был это увидеть сам. О, хорошо .. ;-) Еще раз спасибо – karlmeier

Смежные вопросы