2012-03-18 23 views
0

我有一個應用程序,它使用核心數據,並從互聯網上的鏈接獲取值。閱讀串行隊列中的核心數據iPhone應用程序

當我在AppDelegate中創建一個串行隊列時,它運行得非常好,而且我不會面臨任何問題。

現在,當我試圖重新創建一個UITableViewController類似的場景,並執行相同的串行隊列,但是當控制達到

NSError *error; 
NSArray *match = [context executeFetchRequest:fetchRequest error:&error]; 

執行控制消失,那麼這段代碼仍然在執行直到永恆。

任何人都可以幫助我在這裏究竟是錯誤的嗎?

僅供參考,我傳遞相同的ManagedObjectContext到串行隊列。

回答

0

最後一句可能是關鍵:被管理對象上下文是而不是被設計爲被多個線程/隊列使用。有關更多信息,請參閱concurrency section in the Core Data Programming Guide。如果您的應用只需要支持iOS 5+,那麼您可以通過5.0中添加的new private queue context解決此問題(並且無需管理自己的串行隊列)。否則,您必須必須確保每個線程/隊列都有其自己的上下文,並且您只將安全信息(如受管對象ID)從一個上下文傳遞到另一個上下文。

+0

感謝您的建議。我確實使用了相同的上下文,但在不同的塊中進行了預取和處理,然後將數據重新保存在主塊中。我確實嘗試使用這個私人隊列的東西,但不幸的是未能實現它。 – Kunjal 2012-03-24 16:07:06

+0

值得一提的是,來自WWDC 2011的iOS視頻核心數據對這些人來說有一個相當不錯的介紹:https://developer.apple.com/videos/wwdc/2011/includes/whats-new-in-core-data -on-ios.html#whats-new-in-core-data-on-ios – 2012-03-25 18:31:51

+0

@Otto:感謝您的參考。這非常有幫助。另外,我使用了NSOperation和NSOperationQueue,它也以異步模式運行。 – Kunjal 2012-04-17 13:51:35

相關問題