如何从 swift 中的下载委托更新 gui(进度视图)

2024-01-09

我有一个 DownloadSessionDelegate 类来处理大文件的下载过程。 我想在进度视图中显示进度。有关下载状态的信息位于我的 DownloadSessionDelegate 类中。现在我不知道如何在该课程之外更新我的进度视图。

怎么做 ?

class DownloadSessionDelegate : NSObject, NSURLSessionDelegate, NSURLSessionDownloadDelegate {

    var handlerQueue: [String : CompleteHandlerBlock]!
...
...
...

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        println("session \(session) download task \(downloadTask) wrote an additional \(bytesWritten) bytes (total \(totalBytesWritten) bytes) out of an expected \(totalBytesExpectedToWrite) bytes.")

progressView.setProgress(0.5, animated: true); // <<<Howto reference the progressView
    }
}

从我的 ViewController.swift 触发下载:

func download_zip(sURL: String, sToLocation: String) {


    let progressView = UIProgressView(progressViewStyle: .Bar);
    progressView.center = view.center;
    progressView.progress = 1/2;
    progressView.trackTintColor = UIColor.lightGrayColor();
    progressView.tintColor=UIColor.blueColor();
    view.addSubview(progressView);



        var delegate = DownloadSessionDelegate.sharedInstance;
        delegate.storePath=sToLocation;
        struct SessionProperties {
            static let identifier : String! = "url_session_background_download"
        }
        var configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(SessionProperties.identifier)
        var backgroundSession = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)
        var url = NSURLRequest(URL: NSURL(string: sURL)!)
        var downloadTask = backgroundSession.downloadTaskWithRequest(url)
        downloadTask.resume()
    }

要从另一个类引用进度视图,您需要将进度视图的实例传递给需要其引用的类,在您的情况下:

class DownloadSessionDelegate : NSObject, NSURLSessionDelegate, NSURLSessionDownloadDelegate {

var handlerQueue: [String : CompleteHandlerBlock]!
var progressView: UIProgressView!
...
...
...

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        println("session \(session) download task \(downloadTask) wrote an additional \(bytesWritten) bytes (total \(totalBytesWritten) bytes) out of an expected \(totalBytesExpectedToWrite) bytes.")

    progressView.setProgress(0.5, animated: true); // <<<Howto reference the progressView
    }
}

视图控制器

func download_zip(sURL: String, sToLocation: String) {


let progressView = UIProgressView(progressViewStyle: .Bar);
progressView.center = view.center;
progressView.progress = 1/2;
progressView.trackTintColor = UIColor.lightGrayColor();
progressView.tintColor=UIColor.blueColor();
view.addSubview(progressView);



    var delegate = DownloadSessionDelegate.sharedInstance;
    delegate.storePath=sToLocation;
    //here you pass progressView from ViewController to DownloadSessionDelegate
    delegate.progressView = progressView
    struct SessionProperties {
        static let identifier : String! = "url_session_background_download"
    }
    var configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(SessionProperties.identifier)
    var backgroundSession = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)
    var url = NSURLRequest(URL: NSURL(string: sURL)!)
    var downloadTask = backgroundSession.downloadTaskWithRequest(url)
    downloadTask.resume()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 swift 中的下载委托更新 gui(进度视图) 的相关文章

  • 将现有的 UINavigationController 嵌入到新的视图控制器中

    假设我有一个带有导航控制器和多个视图控制器的故事板 一切都很好 直到我尝试添加新的视图控制器并希望将其与现有的关联起来UINavigationController 当我进入编辑器 gt 嵌入 gt 导航控制器时 Xcode会帮助创建一个新的
  • 在 iOS 中将多种尺寸的文本垂直中心而不是基线与核心文本对齐

    是否可以通过边界中心 每个尺寸 而不是基线来对齐多个尺寸的文本 我尝试了 CTRunDelegate 功能 但它不起作用 这是可能的CTRunDelegateCallbacks getAscent and CTRunDelegateCall
  • 在 Xcode Beta 中分发构建时“IPA 处理失败”

    在尝试分发 IPA 时 Xcode 抛出错误 IPA 处理失败 Steps 产品 gt 存档 gt 分发 gt 企业 开发 gt IPA 处理失败 Xcode Version 11 0 beta 3 11M362v OS 10 15 Bet
  • 接受 iOS 应用付款吗?

    在ios应用程序上实现支付系统可以吗 我想制作一个应用程序 可以浏览我的电子商务网站上的产品 然后让人们在我的应用程序上购买产品 我问这个问题是因为我听说它违反了苹果的政策 这显然取决于所出售的商品 当然 最终的答案只能从你的律师对苹果协议
  • 如何在iOS中将底部安全区域设置为XIB?

    我想打开自定义弹出视图 在 XIB 中设计 它从底部显示 但现在在 iPhoneX 模拟器中 它从屏幕底部显示 我想在安全区域打开弹出窗口 iPhone X 的结果 并且 XIB 布局有约束 简单来说解决方案 使用超级视图删除底部约束并将其
  • Amazon AWS IOS SDK:如何列出文件夹中的所有文件名

    我正在使用 AWS IOS SDK 并尝试列出文件夹中的所有文件 此代码用于列出 BUCKET 中的所有文件等 void s3DirectoryListing NSString bucketName s3Client AmazonS3Cli
  • IOS 向特定用户推送通知?

    是否可以向特定设备发送 iOS 推送通知 我构建了一个论坛类型的应用程序 用户可以创建问题 其他人可以回答它 我需要向提出问题的特定用户发送 iOS 推送通知 通知他们问题已得到解答 这可以通过 PHP 或其他方法来完成吗 是的 您绝对可以
  • iOS:无法从 Swift 建立 RabbitMQ 连接

    我正在尝试从 Swift 连接 RabbitMQ 我已关注this https github com rabbitmq rabbitmq objc client 图书馆 创建 Pod 设置并进入工作区 已检查并核实 成功运行 viewDid
  • Swift 性能:map() 和 reduce() 与 for 循环

    我正在用 Swift 编写一些性能关键的代码 在实现了我能想到的所有优化并在 Instruments 中对应用程序进行分析后 我开始意识到绝大多数 CPU 周期都花在执行map and reduce 对浮点数数组的操作 因此 为了看看会发生
  • 尝试从 json 获取数据时对成员 `jsonObject(with:options:)` 的引用不明确

    我是 Swift 新手 在制作其中一个教程 相当旧 时涉及通过返回 JSON 的 php 从服务器获取凭据 但我遇到了错误Ambiguous reference to member jsonObject with options 在 jso
  • 无效图像路径 - 在路径中找不到图像。 CFBundleIcons Xcode 5

    我正在尝试使用 Xcode 5 0 更新我的 iOS 7 应用程序 一切正常 但是当我存档然后验证时 我收到以下消息 图像路径无效 在键下引用的路径中找不到图像CFBundleIcons APP ICON 57 我尝试删除并添加图像 并手动
  • SwiftUI |警告:绑定首选项_尝试每帧更新多次。可能的原因?

    自从我按照偏好工作以来 PreferenceKey 我在控制台中收到此消息 Bound preference tried to update multiple times per frame 经过无数次的研究 我还没有找到任何方法可以让它安
  • UIWebview JS 性能比 iOS 6/7 上的移动 safari 慢吗?

    我们最近使用 iOS 应用程序中的大量 JavaScript 库测试了一些 HTML5 内容 该应用程序旨在在 UIWebview 中加载这些内容 本次测试使用了 iOS 6 我的团队没有观察到移动 Safari 浏览器出现任何明显的性能问
  • 如何修复无法在范围内找到“FirebaseApp”?

    我有一个问题 请帮忙 每当我尝试运行此代码时 它都会出现错误并显示无法在范围内找到 FirebaseApp 请帮忙 import UIKit import Firebase UIApplicationMain class AppDelega
  • 如何使 TextField 右对齐(尾随)

    我正在努力拥有一个价值文本域以尾随对齐方式显示 正如你所看到的价值34 3以前导对齐方式显示 我确信我错过了一些明显的东西 但我不知道是什么 有任何想法吗 State private var endwert 34 3 var numberF
  • YouTube 嵌入 AirPlay UIWebView

    我正在开发一个视频应用程序 其中包含来自不同来源的大量视频 应用程序中的选项之一必须是通过电视上的 Airplay 播放视频 为了在我的应用程序中显示 YouTube 视频 我使用 YTPlayerView 它是 YouTube API 的
  • AVAssetWriter 不适用于音频

    我正在尝试让音频与 iOS 应用程序的视频一起使用 视频很好 文件中没有录制任何音频 我的 iPhone 扬声器可以工作 这是初始化设置 session AVCaptureSession alloc init menu gt session
  • iOS APNS:以字符串格式将设备令牌发送给提供商

    我需要通过调用在我的请求中需要 JSON 数据的服务 将 iOS 应用程序的 APNS 设备令牌发送给我的提供商 我正在阅读苹果的本地和推送通知编程指南 https developer apple com library ios docum
  • UIScrollView 在缩放或滚动时阻止所有触摸

    当 UIScrollView 通过捏合手势或滚动进行缩放时 我无法按同一窗口中的任何其他按钮 有什么办法可以启用这种行为吗 这就像滚动视图具有独占触摸 尽管我尝试将其明确设置为NO 我在视图中有一个滚动视图 我希望它仅在用户按住滚动按钮时滚
  • UpdatedTransactions(transactionState == .restored) 与 paymentQueueRestoreCompletedTransactionsFinished

    正如标题所描述的 实际有什么不同 如果我有这个 func paymentQueue queue SKPaymentQueue updatedTransactions transactions SKPaymentTransaction for

随机推荐