2011-05-18 59 views
3

我的應用程序將xml文件解析爲coredata以填充可用視圖。當我觸發一次刷新時,它應該去下載一個新的xml文件,在後臺線程上解析它,然後一次將所有文件保存到managedobjectcontext(替換舊的managedobjectcontext數據),然後更新表。這樣,與Twitter應用類似,用戶可以觸發重新加載並在加載時仍然滾動。將XML解析爲後臺線程上的CoreData,以不鎖定UI

這似乎是一個非常標準的事情要做,但我似乎無法找到任何幫助。

目前我正在使用NSURLConnection在我的應用程序委託下載XML以不鎖定用戶界面。一旦它完成下載它的電話:

ParseOperation * parseOperation = [[ParseOperation alloc] initWithData:receivedData andArray:[NSManagedObjectContext defaultContext]];

[self.parseQueue addOperation:parseOperation];

這開始解析我認爲是後臺線程。我可以在這裏下載xml,然後......

2問題:1)如何將它保存到主線程的managedobjectcontext? 2)如何訪問核心數據中的舊實體以與更新後的xml進行比較?

肯定有人必須遇到這之前...任何示例代碼在那裏?

回答

0

這聽起來像你有正確的一般想法,但你的執行可能關閉。

首先,將一個核心數據相關的操作放到一個NSOperation中並不會使它神奇地工作。您需要確保將MOC專用於操作實例(不要使用主線程MOC),然後使用performBlock方法確保使用正確的隊列具有連接到相同PSC的專用MOC,使用'did save'通知將更改合併回主線程MOC。

至於問題的第二部分,您需要執行現有數據的提取以確定項目是新的還是更新,然後做出相應的反應。您可能不想獲取每個新項目,而是使用內存中的謂詞來過濾要從該集合中查找的數據(此方法更快,但可能會導致內存壓力取決於項目的數量和當故障時它們在記憶中有多大)。

相關問題