Проблемы с добавлением объектов в NSMutableDictionary - PullRequest
3 голосов
/ 28 декабря 2011

Я создаю приложение для iPhone и загружаю информацию с сервера. Я отправляю NSURLRequest на сервер и возвращаю значение NSString. Это работает нормально, и ценность, которую я возвращаю, является правильной. Проблема в том, что когда я пытаюсь добавить значение для переменной в NSMutableDictionary, который я сделал для хранения значений, это не работает. Когда я отлаживаю и смотрю на значения NSMutableDictionary в XCode, он говорит 0 пар ключ / значение сразу после строки, где я добавляю значения. Вот как выглядит мой код:

    NSArray *varsToLoad = [fixedData objectForKey:@"varsToLoad"];
    NSError *error;
    for(NSString *var in varsToLoad){
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: someURL]];
        [request setHTTPMethod:@"POST"];
        NSMutableString *file = [NSMutableString stringWithString:@"file="];
        NSString *file1 = [file stringByAppendingString:var];
        NSString *file2 = [file1 stringByAppendingString:@".txt"];
        [request setHTTPBody:[file2 dataUsingEncoding:NSUTF8StringEncoding]];
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
        NSString *value = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        [varsLoaded setObject:value forKey:var];
    }

varsLoaded объявлено в @implementation и является NSMutableDictionary.

Ответы [ 3 ]

3 голосов
/ 28 декабря 2011

Возможно, проблема в том, что вы не инициализировали свой varsLoaded, говоря: self.varsLoaded = [NSMutableDictionary dictionary];

Итак, вы добавляете объекты в несуществующий словарь, но не получаете исключение, потому что этонормальный в объективе-с:)

0 голосов
/ 28 декабря 2011

Вы должны действительно проверить ответ перед дальнейшей обработкой. Оберните это примерно так:

if (response == nil) {
    // Check for problems

}
else {
     NSString *value = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        [varsLoaded setObject:value forKey:var];
}
0 голосов
/ 28 декабря 2011

Измените первую строку вашего кода с NSArray на NSMutableArray и посмотрите, повезет ли вам больше.

Неважно, что вы объявили свой varsLoaded как NSMutableDictionary где-тоиначе ... в локальном контексте этого кода выше, компилятор считает varsToLoad неизменным массивом и, вероятно, даже не компилирует вашу строку setObject: forKey:.Вы не получаете предупреждения в журнале сборки или в консоли во время работы ??

...