【发布时间】:2015-07-29 15:44:02
【问题描述】:
我有一个带有按钮的 viewController,允许用户从 url 下载文件。 为了保持我的代码干净,我创建了一个从我的视图中调用的下载类。它工作正常,但现在我想为用户提供一些关于下载的 UI 提示。
假设我有一个标签,我想在下载结束后将其文本更改为“已下载”。应该怎么做?
这是我的代码:
文件视图控制器
@IBOutlet weak var downloadLbl: UILabel!
func downloadFile(sender:UIButton!)
{
fileDownloader().download_zip(datastring, destination: path, name: naming, fileis: self.fileId)
}
(这只是重要的部分)
然后我在一个单独的类文件中拥有我的下载功能,我启动了一个 DownloadTaskSession,我使用以下委托来观察下载完成
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
println("session \(session) has finished the download task \(downloadTask) of URL \(location).")
FileViewController().downloadLbl.text = "downloaded"
}
最后一行:FileViewController().downloadLbl.text = "downloaded" 返回错误:致命错误:在展开 Optional 值时意外发现 nil。
有人可以帮忙吗?
结论
在创建类之间的通信时,两个提议的解决方案都有效,但我选择了通知解决方案,因为在我的情况下,我必须更新 UI 以及后台线程进程,并且使用协议并没有按预期工作。进行了通信,但更新 UI 并没有一直有效,即使在使用 dispatch_async 方法推回主线程上的更改之后也是如此。
使用通知系统很有帮助,因为它更易于实施、管理和用于 UI 修改。
【问题讨论】:
标签: ios swift viewcontroller