未知错误当斯威夫特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任务被恢复并快速取消时发生类似的错误。
临时修复(将永远不会被接受为正确的答案,因为它不是):
使用Timer
对象至少400 milliseconds
推迟下POST调用。
libBacktraceRecording.dylib
库是Xcode调试支持的一部分。您不应该在非调试版本中看到此特定崩溃。
如果您需要做任何解决方法(例如减慢请求率),请务必将它们包装在#if DEBUG
中。
此外,请确保您没有反复创建和拆除会话。
除此之外,您可以随时关闭计划中的回溯记录。另请参阅:Memory leak with "libBacktraceRecording.dylib" in React Native ios application
请在此处张贴一些代码,您认为这是崩溃的原因。 – Poles
@请添加代码...您如何处理reposne。你说收到回复后崩溃了。所以,我怀疑问题可能在于处理响应。 – Poles
@Poles添加了一些代码。这就是它。 – vaid