2012-06-17 36 views
0

我目前有一個帶有標籤欄的iPhone項目。在標籤欄上有兩個視圖。這兩個視圖都會將數據加載或保存到核心數據數據庫(這兩個視圖都會啓動一個方法,從Web服務收集數據並將其保存到數據庫中)。加載視圖時,它會從填充視圖中的表的數據庫加載數據。如果我運行該應用程序並單擊tabbar中的第二個視圖,第一個視圖仍然從webservice加載數據並將其插入到單獨線程中的數據庫中。這很好,但是一旦第一個視圖完成將所有數據從webservice加載到數據庫中,它就會凍結兩個視圖控制器,只要第二個視圖控制器正在從數據庫加載數據。核心數據:在保存結束時凍結

控制檯沒有錯誤,xcode沒有提示有任何錯誤。我的所有進程都在不同的線程上工作,所以主線程不會凍結。從Web服務中提取數據並將其保存到數據庫是一種方法,並且在方法結束時我放入了NSLog(@"View Controller 1 Save Complete")。一旦這個被調用並且第二個視圖控制器仍在加載數據,它就會凍結。整個應用程序無響應(無效)。

我看過其他SO問題的信息,它建議我宣佈每個抓取或插入一個新的NSManagedObjectContext,我已經這樣做,但它沒有解決問題。

如果有人知道發生了什麼,或者想了解更多信息,請告訴我。編輯: 我正在使用Xcode 4.5和IOS 6模擬器。這是一週前發佈的新IOS的測試版本。我知道這不是錯誤,因爲在我開始使用測試版之前,我有這個問題。

+2

請發佈一些相關的代碼,包括如何連接到Web服務。 – timthetoolman

+0

@timthetoolman我無法形象會有任何相關的代碼,因爲這不是一個web服務錯誤,並沒有控制檯中的錯誤? – CoreCode

+0

聽起來像您可能會遇到線程死鎖。正如@timthetoolman所說的,我們需要看一些代碼來看看發生了什麼。 – Sean

回答

3

我過去遇到過的一種可能性,就是試圖在與創建它的線程不同的線程上與MOC進行交互。如果您正在嘗試執行併發操作,則可能會發生這種情況,並且您必須非常小心地在與MOC通信時知道您始終處於哪個線程中。例如,對於異步事件,您的回調可能在您認爲不同的線程上執行(例如,viewDidLoad發生在主線程上,所以如果您在那裏創建MOC,則以後不能從其他線程使用它)。