从嵌套助手类访问ProgressView

时间:2016-11-22 05:20:34

标签: swift swift3 uiprogressview

我对嵌套类等有疑问。我有一个处理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)

有任何想法或提示吗?提前谢谢。

...凹凸

1 个答案:

答案 0 :(得分:0)

您似乎正在另一个线程上工作,然后尝试更新状态。任何视图更新都需要在主线程上进行。以下是如何执行此操作的示例:Updating the UI Using Dispatch_Async in Swift