2014-04-23 48 views
0

我有一個DatabaseManager類,它處理在我的應用程序中創建和打開數據庫,並在需要時發送「上下文」。問題是openWithCompletionHandler是異步的,所以openDatabase調用立即返回,然後我的初始視圖控制器崩潰試圖從沒有打開的數據庫中獲取數據。我是否正確地打開我的數據庫?

我的解決方案是將初始VC傳遞給openDatabase方法,並將它從完成處理程序代碼塊中調回到VC中。所以我最初的VC基本上調用DatabaseManager來打開數據庫,然後坐着等待,直到它接到一個回調,然後獲取顯示所需的數據。

它工作正常,數據出現時沒有明顯的延遲。

這是正常的做法嗎?我想學習最好的方法,而不是陪審團操縱一些有用的東西。我嘗試了各種搜索並閱讀Apple文檔,但無法找到答案。如果我錯過了文檔中顯而易見的內容,請在那裏指出我的位置。

謝謝!

回答

0

「這是正常的做法嗎?」是。這就是你在異步時所做的事情。因爲執行異步事件的對象A不是異步事件完成時需要重新加載其數據的對象B,但是您已經通過交叉引用對象A來解決這個問題。這實際上並不是與例如不同NSURLSession回調它的委託。

+0

謝謝。良好的反饋。 –

+0

非常歡迎。有可能的改進是異步進程不需要知道任何關於主對象(它的類或它的方法)。例如,您可以使用協議和真正的委託架構;或者不是交給自己的引用,你可以交給Objective-C塊。但是,你在做什麼沒有任何問題。 – matt