2011-12-28 106 views
2

我正在製作iPhone應用程序,並且正在從服務器加載信息。我發送NSURLRequest到服務器並獲取一個NSString值。這工作正常,我回來的價值是正確的。問題是,當我嘗試將變量的值添加到我爲存儲值而創建的NSMutableDictionary時,它不起作用。當我調試並查看Xcode中NSMutableDictionary的值時,它會在添加值的行後面顯示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

的問題可能是你沒有說self.varsLoaded = [NSMutableDictionary dictionary];

所以你將對象添加到一個不存在的字典初始化你varsLoaded,但你沒有得到一個例外,因爲這是客觀正常-c :)

+1

這也發生在我身上,但如果這種情況下,你不會在調試器中獲得0個鍵/值對,你會得到零。 – jrturton 2011-12-28 16:30:13

+1

不,它在調試器窗口中將未初始化的字典顯示爲0個鍵/值對。我測試了它。 – aslisabanci 2011-12-28 16:36:03

+0

在這種情況下,你可能是對的! – jrturton 2011-12-28 16:39:34

-1

將您的代碼的第一行從NSArray更改爲NSMutableArray,看看您是否有更好的運氣。

不要緊,你宣佈你的varsLoadedNSMutableDictionary別的地方......在代碼的本地上下文中,編譯器認爲varsToLoad是一個不可改變的陣列,可能甚至沒有編譯你setObject: forKey:線。您在運行時沒有在構建日誌或控制檯中收到警告?

+0

根據代碼varsToLoad和VarsLoaded是不同的對象。 varsLoaded可能是一個NSMutableDictionary。 downvote不是從我btw – MadhavanRP 2011-12-28 16:52:43

0

在進一步處理之前,您應該確實檢查響應。把它包裝在這樣的東西:

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

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

沒有響應返回適當的值 – 2011-12-28 17:05:47