2017-05-08 72 views
0

我在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請求都停留在同一線程上?

+1

你可以發佈完整的崩潰嗎?這將有所幫助。 –

+0

您正在使用未定義的變量「escapedURL」,但我認爲將代碼複製到SO時這只是一個錯誤。 :)也許,在您的完成處理程序中,您是否嘗試訪問缺少的響應中的某些數據? –

回答

相關問題