NSMutableDictionary не принимает пару ключ / значение - PullRequest
0 голосов
/ 02 октября 2010

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

В итоге получился бы словарь с двумя парами ключ / значение:

{
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.В тупик, как я уже сказал ...

1 Ответ

1 голос
/ 02 октября 2010

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

parsedXMLDict = [[NSMutableDictionary alloc] init];

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

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

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

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

...