2010-08-02 93 views
1


我正在研究使用coredata的ipad應用程序。它下載有關網上數據庫的信息,並將它們記錄在coredata中。該應用程序基於分割視圖。我的問題是在後臺更新數據。
以下是我的工作方式:
- 我創建了一個NSOperation,用於下載和更新數據。
- 這的NSOperation使用不同的NSManagedObjectContext比的appDelegate的背景下,這個函數返回後,即在的appDelegate:在兩個不同的過程中更新和刪除實體

(NSManagedObjectContext*)newContextToMainStore { 
    NSPersistentStoreCoordinator *coord = nil; 
    coord = [self persistentStoreCoordinator]; 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
    [moc setPersistentStoreCoordinator:coord]; 
    return [moc autorelease]; 
} 

- 我已經在的NSOperation的觀察者來說,這將調用這個函數在的appDelegate當我保存的情況下,修改委託過上下文:

- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification { 
    [[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification]; 
} 

但我有一個問題:當我刪除RootViewController的元素,我真的不知道如何管理在後臺進程中的變化,因爲裏面有一個循環瀏覽所有的enti關係:如果我刪除一個實體,當後臺循環處於相同的權限時,這是......非常糟糕......

我的解決方案只是在我刪除一個實體時停止更新過程,然後重新啓動它,只是...
但我意識到,在「主」上下文中所做的更改並不適用於我剛剛爲更新創建的新上下文中。

所以我問你:爲什麼變化不適用於新的環境?如果這是錯誤的方式,你如何做到這一點?使用mergeChangesFromContext或其他東西?
非常感謝您。

回答

0

對不起,我的錯誤:
- 首先,我的實體包含其他實體,因爲關係不好,這是包含在父entitie實體未被刪除。
- 第二,我在考慮調用-cancelAllOperations將會停止當前的操作,但事實並非如此,如果該過程被[self isCancelled]取消,您必須檢查nsoperation。
就是這樣!

+0

您應該點擊此答案旁邊的複選標記,以便系統顯示回答的問題。你被允許回答你自己的問題。 – TechZen 2010-08-04 13:35:33

-1

如果有人從界面中刪除某些東西,你不需要小心,bcs NSArrayController是線程安全的。但是如果你在同一時間進行更新和刪除,你必須關心它。

相關問題