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

+1

아니요, 디버거 창에 초기화되지 않은 사전을 0 키/값 쌍으로 표시합니다. 나는 그것을 시험했다. – aslisabanci

+0

그럴 경우 아마 맞을 것입니다! – jrturton

-1

코드의 첫 번째 줄을 NSArray에서 NSMutableArray으로 변경하고 운이 더 좋은지 확인하십시오.

위, 컴파일러는 varsToLoad는 불변의 배열이며, 아마 당신의 setObject: forKey: 라인을 컴파일되지 믿고 당신의 varsLoaded 다른 곳 NSMutableDictionary A와 ... 그 코드의 로컬 맥락에서 당신이 선언하는 것이 중요하지 않습니다. 실행 중일 때 빌드 로그 나 콘솔에 경고가 표시되지 않습니까?

+0

코드에 따르면 varsToLoad 및 VarsLoaded는 다른 객체입니다. varsLoaded는 아마도 NSMutableDictionary입니다. downvote was not from me btw – MadhavanRP

0

처리하기 전에 응답을 확인해야합니다. 다음과 같이 포장하십시오.

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

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

응답이 없습니다. 적절한 값이 반환됩니다. –

관련 문제