我正在编写一个测试程序,它使用带有多个选项卡视图的选项卡控制器。该程序下载多个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