2012-06-05 107 views
0

我已經成功創建了一個連接到我的web服務併發送一個字符串並接收字符串響應的方法。但是,我現在試圖發佈一個使用NSJSONSerialization創建的JSON字典。但是,Xcode給我一個錯誤。我試圖轉換我的初始代碼。下面的相關行...如何通過NSURLConnection發送JSON數據

NSData* loginDataJSON = [NSJSONSerialization dataWithJSONObject:loginDataDictionary options:NSJSONWritingPrettyPrinted error:&error]; 
[request setValue:loginDataJSON forHTTPHeaderField:@"loginDataJSON"]; 
[request setHTTPBody:[loginDataJSON dataUsingEncoding:NSUTF8StringEncoding]]; 

第二行繼承人抱怨說我使用的是需要NSString的NSData。 第三行抱怨loginDataJSON可能不dataUsingEnconding

我似乎被強迫的NSData對象(因爲什麼NSJSONSerialization給我),在那裏不能使用迴應。我最好試圖將JSON轉換爲一個字符串用於我現有的請求代碼,或者應該/我可以更改我的請求代碼以接受NSData而不是NSString?

回答

0

您是否嘗試過使用JSONKit或RESTkit等框架? RESTkit特別用於與JSON進行webservice通信,並在內部使用JSONKit和另一個解析器。我認爲這將解決您的問題,也許一些未來的一個;)

+0

不,我沒有試過那些然而。我知道他們,但我通常更喜歡在可能的情況下使用內置的iOS方法。但是如果沒有人能指出我正確的方向,我可能不得不轉向REST。 –

0

做一個可變的請求,並

[request setHTTPBodyWithString:myMessageJSON]; 

其中,方法如下:

- (void)setHTTPBodyWithString:(NSString *)body { 
    NSData *bodyData = [body dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    [self setValue:[NSString stringWithFormat:@"%d", [bodyData length]] forHTTPHeaderField:@"Content-Length"]; 
    [self setHTTPBody:bodyData]; 
} 
0

您需要發送的JSON作爲請求的正文,並可能設置內容類型和內容長度:

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:nil]; 
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"]; 
[request setValue:[NSString stringWithFormat:@"%d", [loginDataJSON length]] forHTTPHeaderField:@"content-length"]; 
[request setHTTPBody:loginDataJSON];