サーバーから切断応答は:NSURLSession(iOSの10)私は私にJSON文字列を送信し、サーバーへのHTTPリクエストを行うには、このコードを書いている
-(NSDictionary*)doRequestWithCommand:(NSString*)command andBody:(NSString*)requestBody {
__block NSDictionary *result = nil;
NSURL *URL = [NSURL URLWithString: [NSString stringWithFormat:@"%@%@", PREFIX_URL, command] ];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:REQUEST_TYPE_POST];
[request setHTTPBody:[requestBody dataUsingEncoding:NSUTF8StringEncoding]];
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
__block BOOL done = NO;
while (!done) {
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data != nil) {
result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:4]);
NSLog(@"len %lu", [[[NSString alloc] initWithData:data encoding:4] length]);
done = YES;
}
dispatch_semaphore_signal(sem);
}];
[dataTask resume];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
}
return result;
}
このコードは、iOS 9と下で正常に動作しますしかし、iOS 10はありません!実際にはサーバーからの答えは1610番目の文字がカットされています!
私は何が問題なのか分かりません! 私を助けることができますか?
おかげ
'dataTaskWithRequest'によって返されたエラーオブジェクトを調べる必要があります。それは「なし」ですか?また、 'JSONObjectWithData'によって返されたエラーオブジェクトを取得し、それが' nil'かどうかを確認する必要があります。コードがうまくいかないときは、最初に行うべきことは、エラーオブジェクトを調べ始めることです。 – Rob
'result'リファレンスは' nil'ですか? 'nil'の場合は、サーバーからのJSONレスポンスに問題があると思われます。あなたはこのJSONを手動で構築していますか、それを構築するためにAPIを使用していますか?また、問題がある場合、 'JSONObjectWithData'によって返されたエラーオブジェクトは、何かがJSONに何か問題があるかどうかを教えてくれます。 – Rob
エラーはゼロです!そして答え(結果)は無しではなく、iOSから削除されます。答えはサーバーから生成され、完全かつ正確です!私が残りのクライアントからのリクエストをしようとすると、答えは正しいものの、カットされないので、問題はIOSですが、私は何か分かりません! – frank