2011-12-28 70 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

相关问题