我对嵌套类等有疑问。我有一个处理JSON数据下载到设备上的UIView,我有一个显示用户进度的进度条。因为我必须等待整个下载完成才能继续,所以我实现了一个帮助类,所以我可以使用尾随闭包(found here)
任何人,这是来代码:
在我的viewDidLoad
中for-loop
现在这里是助手班:
@IBOutlet weak var ProgressBar: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
ProgressBar.setProgress(0.10, animated: true)
updateCoreStack.needsCMS = true
updateCoreStack.needsSOC = true
updateCoreStack.needsDIN = true
updateCoreStack.progress = ProgressBar
updateCoreStack.beginUpdate{ completion in
//fires when all updates return!
print(completion)
}
}
可能值得注意的是,...
let updateCoreStack = uCoreStack()
class uCoreStack {
var progress:UIProgressView? = nil
var needsCMS = false
var needsDIN = false
var needsSOC = false
func beginUpdate(complete: @escaping (String)->()) {
...
self.progress?.setProgress((self.progress?.progress)! + 0.05, animated: true)
...
}
}
可能会被多次调用,即,正常使用时,beginUpdate
可能会被激活3次。 (如果这甚至都很重要......)
通过此实现,每个progressBar更改时都会收到以下错误:
2016-11-21 23:50:34.799607 DemoApp [779:241618]此应用程序在从主线程访问引擎后从后台线程修改autolayout引擎。这可能导致引擎损坏和奇怪的崩溃。
堆栈:(
0 CoreFoundation 0x000000018505c1d8 + 148
1 libobjc.A.dylib 0x0000000183a9455c objc_exception_throw + 56
2 CoreFoundation 0x000000018505c108 + 0
3 Foundation 0x0000000185c40f0c + 192
4基金会0x0000000185c40c4c + 76
5基金会0x0000000185a8c5dc + 112
6基金会0x0000000185c3f8e8 + 112
7 UIKit 0x000000018aeb5ea0 + 244
8 UIKit 0x000000018aed9d78 + 660
9 UIKit 0x000000018aef0b84 + 108
10 UIKit 0x000000018b3cd7d8 + 276
11 DemoApp 0x0000000100122f70)
有任何想法或提示吗?提前谢谢。
...凹凸
答案 0 :(得分:0)
您似乎正在另一个线程上工作,然后尝试更新状态。任何视图更新都需要在主线程上进行。以下是如何执行此操作的示例:Updating the UI Using Dispatch_Async in Swift