2017-06-12 269 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) 
} 

當然,你也可以切換到使用定時器但那是另一回事。