Obj-Cではかなりダミーです。データをアップロードしてHTTPリクエストを送信するとアプリケーションがクラッシュする
+ (void) sendRequest
{
NSString *url = @"zzz";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:escapedURL]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
//...
}
} else {
// ...
}
}];
[postDataTask resume];
}
時々私はクラッシュを取得します:ここで
-(void) callServer
{
dispatch_async(dispatchQueue, ^{
[ServerHandler sendRequest];
});
}
はsendRequest
方法、NSURLSession
を使用して、基本的なHTTP呼び出しです...私はcallServer
を呼ぶと同時に、私はイメージ、ファイルのようないくつかのデータをアップロードします:
#2 Crashed: NSOperationQueue 0x17403e500 :: NSOperation 0x184446990 (QOS: DEFAULT)
0 libobjc.A.dylib 0x184ee315c objc_msgSend + 25
1 YOYO 0x100766218 __82-[MyProg callServer]_block_invoke.804 + 383424
2 YOYO 0x1007679cc __94+[ServerHandler sendRequest]_block_invoke + 389492
3 CFNetwork 0x186a781fc __75-[__NSURLSessionLocal taskForClass:request:uploadFile:bodyData:completion:]_block_invoke + 32
4 CFNetwork 0x186a8fef8 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 148
私は、アップロード処理のコードを変更することはできませんが、私は上記のコードを変更することができます。
私のコードを安全にする方法です。
dispatch_async(dispatchQueue, ^{
[ServerHandler sendRequest];
});
}
アップロードデータ(Swiftからの)とHTTPリクエストの両方が同じスレッドに残っているのはなぜですか?
完全なクラッシュを投稿できますか?それは参考になるでしょう。 –
どこにも定義されていない変数 'escapedURL'を使用していますが、これはコードをSOにコピーしたときの単なる間違いであると想定しています。 :)おそらく、完了ハンドラで、あなたの応答の一部のデータにアクセスしようとしていますか? –