2017-06-12 39 views
0

当我按下一个按钮时,一个模式UIViewController出现在UIScrollView中的UIImageViews幻灯片。我这样做是为了更改到下一个项目每3秒:dispatchQueue.main.asyncAfter(截止时间:)当UIViewController关闭swift时崩溃

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

唯一的问题是,当我关闭此的UIViewController,代码将会等待延迟,然后崩溃。

This is the only error i can see

我怎样才能解决这个问题? 谢谢

+0

@ Farid: - 你可以分享崩溃日志 – Developer

+0

你正在访问无滚动视图。你解散了控制器,控制器销毁了它的所有对象,然后scrollView不在内存中。 –

+0

如果您分享日志,我们可以帮助您更好。我的猜测是这是因为你在执行块中持有对'self'的强烈引用。你可能想用'[weak self]'来代替,看看会发生什么。 – ozgur

回答

0

您保留了对scrollView的强烈参考。如果你这样做,应该只持有一个薄弱环节,因此,当所属视图控制器被破坏,不会造成错误:

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

当然,你也可以切换到使用定时器但那是另一回事。

相关问题