我正在編寫一個測試程序,它使用帶有多個選項卡視圖的選項卡控制器。該程序下載多個XML文件,通過Core Data解析並填充sqlite表。 Core Data變量和函數位於Xcode創建的代碼之後的App Delegate文件中。共享託管對象上下文
我開始通過簡單地將managedObjectContext變量傳遞到需要它的每個子視圖中,如我在App代表初始化它,例如:
FirstViewController *vc1;
vc1 = [[[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil] autorelease];
[vc1 setManagedObjectContext:self.managedObjectContext];
然而,我有一個函數(resetData),該刪除整個數據存儲 - 刪除持久性存儲文件,並將所有核心數據變量(managedObjectContext,managedObjectModel,persistentStore等)設置爲零,重新初始化所有內容。這樣程序就可以從頭開始並重新下載網絡中的所有數據。發生這種情況時,子視圖現在指向舊的managedObjectContext。
在所有子視圖中更新managedObjectContext變量的最佳方法是什麼?手動更新resetData函數中子視圖的managedObjectContext變量?使用NSNotificationCenter向所有視圖發送通知?是否完全刪除並重新初始化所有持久性存儲文件過度殺毒?
我現在已經把此getter,只是指回應用程序委託中需要參考MOC的所有類:
- (NSManagedObjectContext *)managedObjectContext {
MyAppDelegate* ad = (MyAppAppDelegate*)[[UIApplication sharedApplication] delegate];
return [ad managedObjectContext];
}
我很新的可可/ iOS的設計patters正在嘗試找出做這些事情的最正確方法!我現在有的工作,但我想知道是否有未知的陷阱或未來的問題?謝謝!
」是否完全刪除並重新初始化所有持久性存儲文件過度殺毒?「大概。你可以刪除所有的對象? – jrturton
@jrturton刪除所有對象絕對值得一試。但是如果它們中有很多,它可能會很慢。 CoreData不是數據庫。 – tonklon
@tonklon - 當然。但是從這個問題我們不知道有多少物體。你的回答非常好。重新創建VC堆棧是要走的路 – jrturton