2011-12-28 3 views
2

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

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.

ответ

2

Проблема может быть, что вы не инициализирован ваш varsLoaded говоря self.varsLoaded = [NSMutableDictionary dictionary];

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

+1

Это тоже пришло в голову, но если бы это было так, вы бы не получили 0 пар ключ/значение в отладчике, вы бы получили нуль. – jrturton

+1

Нет, он показывает неинициализированный словарь как 0 пары ключ/значение в окне отладчика. Я протестировал его. – aslisabanci

+0

В этом случае вы, вероятно, правы! – jrturton

-1

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

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

+0

В соответствии с кодом varsToLoad и VarsLoaded - это разные объекты. varsLoaded, вероятно, является NSMutableDictionary. downvote был не от меня. btw – MadhavanRP

0

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

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

} 
else { 
    NSString *value = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
     [varsLoaded setObject:value forKey:var]; 
} 
+0

никакой ответ не возвращает правильное значение –

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