dispatchQueue.main.asyncAfter(截止日期)崩溃,当UIViewController解雇了swift

时间:2017-06-12 11:51:24

标签: ios swift

当我按下一个按钮时,会出现一个模态UIViewController,在UIScrollView中显示UIImageViews的幻灯片。我这样做是为了每隔3秒换到下一个项目:

let when = DispatchTime.now() + 3
DispatchQueue.main.asyncAfter(deadline: when) {
    scrollView.scrollToViewAtIndex(nextItem(), animated: true)
}

唯一的问题是,当我解雇这个UIViewController时,代码将等待延迟,然后崩溃。

This is the only error i can see

我该如何解决这个问题? 感谢

1 个答案:

答案 0 :(得分:0)

您保留对scrollView的强引用。如果你这样做,它应该只保持一个弱链接,因此当拥有的视图控制器被销毁时,它不会导致错误:

let when = DispatchTime.now() + 3
DispatchQueue.main.asyncAfter(deadline: when) { [weak self] in
    self?.scrollView.scrollToViewAtIndex(nextItem(), animated: true)
}

当然你也可以切换到使用计时器,但这是另一个故事。