gpt4 book ai didi

ios - 无法在多点连接框架中显示数据传输进度

转载 作者:行者123 更新时间:2023-11-28 12:05:26 24 4
gpt4 key购买 nike

我尝试在使用多点连接时打印数据传输的进度。progress 信息在接收方的 didStartReceivingResourceWithName 方法和发送方的 sendResource 方法中可用。以下是我如何实现接收端:

func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
DispatchQueue.main.async {
print (progress)
}
}

下面是我如何实现发送方:

func sendFileAction()->Progress{
var filePath = Bundle.main.url(forResource: "10MO", withExtension: "file")
if mcSession.connectedPeers.count > 0 {

do {
let data = try Data(contentsOf: filePath!)
fileTransferProgressInSender = mcSession.sendResource(at: filePath!, withName: "filename", toPeer: mcSession.connectedPeers[0]) { (error) -> Void in
DispatchQueue.main.async {
if error != nil {
print("Sending error: \(String(describing: error))")
}else{
print("sendAFile with no error "+"filename")
}
}
}
}
catch let error as NSError {
let ac = UIAlertController(title: "Send file error", message: error.localizedDescription, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
}
}
return(fileTransferProgressInSender)
}

接收函数只在开始时显示一次progress

<NSProgress: 0x1c0133740> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of 10485760  

而且我不知道在哪里可以调用 sendFileAction 的返回来显示发送方的进度。

有什么帮助吗?谢谢。

编辑:我尝试使用以下代码:

func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
startTime = Date()

DispatchQueue.main.async {
self.endTransfer = false
self.sendProgressBar.progress = 0.0
self.updateProgress(progress: progress)
}
}

func updateProgress(progress:Progress){
DispatchQueue.main.async {
while !self.endTransfer {
print (progress.fractionCompleted)
self.sendProgressBar.progress = Float(progress.fractionCompleted)
}
}
}

虽然 print 在控制台中给出了真正的进度,但进度条从 0 跳到 1(在 print 之前达到 1)。

我做错了什么?

再次感谢。

最佳答案

对于您的接收器,您应该捕获 Progress 变量以保存,然后通过重复计时器查询它。

Apple 概述了 basics here .

An NSProgress object that can be used to cancel the transfer or queried to determine how far the transfer has progressed.

对于您的发件人,您将获得一个进度指示器作为函数的返回。保存它并使用计时器查询它以查找状态。

关于ios - 无法在多点连接框架中显示数据传输进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49411785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com