2017-05-08 7 views
0

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リクエストの両方が同じスレッドに残っているのはなぜですか?

+1

完全なクラッシュを投稿できますか?それは参考になるでしょう。 –

+0

どこにも定義されていない変数 'escapedURL'を使用していますが、これはコードをSOにコピーしたときの単なる間違いであると想定しています。 :)おそらく、完了ハンドラで、あなたの応答の一部のデータにアクセスしようとしていますか? –

答えて

関連する問題