我在Obj-C中非常虛擬。我打電話callServer
,並在同一時間,我喜歡上傳圖片,文件的一些數據...上傳數據併發送HTTP請求時,應用程序崩潰
-(void) callServer
{
dispatch_async(dispatchQueue, ^{
[ServerHandler sendRequest];
});
}
下面是一個使用NSURLSession
一個sendRequest
方法,基本的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];
}
有時候我崩潰:
#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
我不能改變的上傳過程的代碼,但我可以改變上面提到的代碼。
所以問題是如何使我的代碼安全a.e.
dispatch_async(dispatchQueue, ^{
[ServerHandler sendRequest];
});
}
爲什麼上傳數據(來自Swift)和HTTP請求都停留在同一線程上?
你可以發佈完整的崩潰嗎?這將有所幫助。 –
您正在使用未定義的變量「escapedURL」,但我認爲將代碼複製到SO時這只是一個錯誤。 :)也許,在您的完成處理程序中,您是否嘗試訪問缺少的響應中的某些數據? –