未知错误当斯威夫特3 iOS的HTTP发布

问题描述:

我正在发送一些数据从资产使用雨燕3.未知错误当斯威夫特3 iOS的HTTP发布

的JustHTTP框架我最初使用自己的代码发送数据的Web服务器的应用程序。

当数据已发送并且收到来自Web服务器的响应时,应用程序有时会完全随机崩溃并显示错误。

有时会发生这种情况,有时并不会。

我已将问题跟踪到代码 的URLSessions部分,错误以堆栈跟踪结束。

但是,我该如何解决这个错误? 这是什么原因?

错误是:

和迹线看起来像这样:

com.apple.NSURLConnectionLoader(9):EXEC_BAD_ACCESS(码= 1, 地址= 0.33)

libBacktraceRecording.dylib`__gcd_queue_item_enqueue_hook_block_invoke:

0x10e43dea8 <+0>: pushq %rbp 
    0x10e43dea9 <+1>: movq %rsp, %rbp 
-> 0x10e43deac <+4>: movq 0x20(%rsi), %rax 
    0x10e43deb0 <+8>: movq 0x20(%rdi), %rcx 
    0x10e43deb4 <+12>: cmpq 0x8(%rcx), %rax 
    0x10e43deb8 <+16>: sete %al 
    0x10e43debb <+19>: popq %rbp 
    0x10e43debc <+20>: retq 

编辑 我怀疑这一切从这里开始:

func sendChunk(chunkOwner: extractionResults, chunkData: Data, chunkIndex: Int, onSuccess: @escaping (assetInfo) -> Void){ 


     let params = [ 
      "id"   : chunkOwner.assetInfo.id      , 
      "filename"  : chunkOwner.assetInfo.filename     , 
      "part_number" : String(chunkIndex)        , 
      "size"   : String(describing: chunkOwner.assetInfo.size ), 
      "md5"   : chunkOwner.MD5         , 
     ] 



     let partName: String = params["filename"]! + "." + params["id"]! + ".part" + params["part_number"]! 

     if let response = Just.post("http://192.168.0.23/upload.php", data:params, files:["file":.data(partName, chunkData, nil)]).content { 



      let fn = JSON(data: response)["Filename"].stringValue 
      let ci = JSON(data: response)["Part_Number"].intValue 

      let msg1: String = fn + " (" + String(chunkData.count) + "/" 
      let msg2: String = String(chunkOwner.assetInfo.size) + " bytes) " 
      let msg3: String = "chunk " + String(ci+1) + " of " 
      let msg4: String = String(chunkOwner.assetInfo.chunkCount()) + " was successfully uploaded" 
      let msg = msg1 + msg2 + msg3 + msg4 

      print(msg) 

      onSuccess(chunkOwner.assetInfo) 
     } 
} 

注:

对象extractionResults是这里找到适合的参考AssetManager框架的一部分:https://github.com/aidv/AssetManager

EDIT 2 刚才我收到错误

螺纹11:EXC_BAD_ACCESS(代码= EXC_i386_GPFLT)

相同的跟踪如前。

编辑3

似乎在发生得太快员额,如果出现问题一后的,其他。

如果我让POST至少停留0.5秒,那么问题似乎消失。

我已经读过其他地方,当URL任务被恢复并快速取消时发生类似的错误。

+0

请在此处张贴一些代码,您认为这是崩溃的原因。 – Poles

+0

@请添加代码...您如何处理reposne。你说收到回复后崩溃了。所以,我怀疑问题可能在于处理响应。 – Poles

+0

@Poles添加了一些代码。这就是它。 – vaid

临时修复(将永远不会被接受为正确的答案,因为它不是):

使用Timer对象至少400 milliseconds推迟下POST调用。

libBacktraceRecording.dylib库是Xcode调试支持的一部分。您不应该在非调试版本中看到此特定崩溃。

如果您需要做任何解决方法(例如减慢请求率),请务必将它们包装在#if DEBUG中。

此外,请确保您没有反复创建和拆除会话。

除此之外,您可以随时关闭计划中的回溯记录。另请参阅:Memory leak with "libBacktraceRecording.dylib" in React Native ios application