2015-03-13 36 views
0

我們幸運地從內部用戶那裏進來,所以我們能夠詳細檢查她的手機,並重新構建了發生的事情:她有一個非常老而慢的iPhone。當她升級到我們的最新版本時,第一次有數據庫訪問時,它引發了遷移,在她的舊的慢速電話上顯然花了很長時間。不幸的是,我們第一次ping數據庫在應用程序中:didFinishLaunchingWithOptions :,並且iOS決定我們的應用程序花費很長時間才能完成,並且在數據庫遷移過程中殺死了應用程序。這意味着每次她嘗試啓動應用程序後,數據庫已損壞,發生不好的事情。在應用程序中擁有數據庫訪問權限是否是不好的做法:didFinishLaunchingWithOptions:?

顯然,我們可以通過在應用程序中不做任何數據庫訪問來解決這個問題:didFinishLaunchingWithOptions :.但另一方面,我們已經看到過這種情況,只有一位用戶使用舊手機(據推測,這是一個真正的完整數據庫)。所以我不確定這個「bug」是多麼的讓褲子變溼......

在應用程序中擊中數據庫被認爲是可怕的做法:didFinishLaunchingWithOptions :,我們應該在下一個可能的機會解決這個問題?或者這不是什麼大不了的事,我們在這裏只是有一場「完美的風暴」?有什麼想法嗎?

回答

1

如您所知,您不應該在didfinishlaunchingwithoptions中執行長時間運行的任務,因爲它必須儘快返回。我不知道什麼是極限。但就你而言,你已達到極限。

因此,解決方案是在您必須執行長時間運行的任務(例如大數據庫遷移)時添加啓動屏幕(或等待屏幕)。把遷移放在這個ViewController中(不是在AppDelegate中),那麼即使在慢速的設備中也不會有問題。

+0

我們已經爲我們期望耗費的東西設置了啓動畫面。有問題的代碼通常只是一個非常快速的數據庫查詢(查找配置文件名稱或IIRC),只是在這個奇怪的情況下,它花了很長時間才讓我們關閉。這就是讓我覺得也許在didFinishLaunchingWithOptions中碰到數據庫通常是不好的做法,因爲你永遠不能確定數據庫查詢可以持續多久。我沒有聽到壓倒性的「是的,那真是太可怕了,永遠不會那麼做!」,所以我現在傾向於迴避這個問題。 – user435779 2015-03-20 14:40:43

相關問題