我已经搜索过,在这里找不到这个:
我正在尝试将NSData对象发送到Web服务。 NSData对象是使用iOS 5内置JSON的JSON对象。
我需要执行异步发送,然后检查服务器的响应。
我不想使用任何第三方库。
以下是我已经做的不起作用:
NSDictionary * initialLogAsJSON = [NSDictionary dictionaryWithObjects:items forKeys:keys];
NSError * error;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:initialLogAsJSON options:NSJSONWritingPrettyPrinted error:&error];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:kURLSendTestStartedDataToTenOneServer ]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"appliction/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: jsonData];
[NSURLConnection sendAsynchronousRequest:request
queue:self.queue
completionHandler:^( NSURLResponse * response, NSData * data, NSError * error )
{
NSLog( @"If finished with reponse = %@\nData: %@\nError %@", response, data, error );
// do something useful
}
];
答案 0 :(得分:2)
两个问题:
1)你应该断言或记录该呼叫中的每个对象,这样你才知道什么都不是。
2)你这里有一个错字:
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"appliction/json" forHTTPHeaderField:@"Content-Type"];
第二个应用程序缺少'a'
答案 1 :(得分:1)
实际上问题比...更容易。
由于源字符串中有一些有趣的转义字符,因此URL为零 -
这是我的最终(工作)实施:
NSDictionary * mainJSON = [NSDictionary dictionaryWithObjects:mainItems forKeys:mainKeys];
NSError * error;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:mainJSON options:NSJSONWritingPrettyPrinted error:&error];
NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSASCIIStringEncoding];
NSString * serverString = [NSString stringWithFormat:@"%@", kURLServer];
NSString * urlString = [NSString stringWithFormat:@"%@%@", serverString, jsonString];
NSString * webStringURL = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL * url = [NSURL URLWithString:webStringURL];
NSAssert( url != nil, @"URL nil - Check string values for URL to Server!" );
dispatch_async( kBackgroundQueue, ^
{
NSData * data = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector( receivedResponseFromServer: )
withObject:data
waitUntilDone:YES];
}
);