IOS/xcode:将核心数据从应用程序委托移动到模型类

IOS/xcode:将核心数据从应用程序委托移动到模型类,ios,xcode,core-data,nsmanagedobjectcontext,Ios,Xcode,Core Data,Nsmanagedobjectcontext,IOS新手正在与核心数据搏斗。Xcode示例项目将核心数据放入app delegate中。然后在app delegate.m文件中,在应用程序didfishlaunchwithoptions:方法中,它包括对核心数据文件的调用:controller.managedObjectContext=self.managedObjectContext在主控制器中激发managedobjectcontext 然而,我已经读到,应用程序委托文件并不是真正应该放核心数据的地方,而是应该把它放在一个模型文件中,并

IOS新手正在与核心数据搏斗。Xcode示例项目将核心数据放入app delegate中。然后在app delegate.m文件中,在
应用程序didfishlaunchwithoptions:
方法中,它包括对核心数据文件的调用:
controller.managedObjectContext=self.managedObjectContext在主控制器中激发managedobjectcontext

然而,我已经读到,应用程序委托文件并不是真正应该放核心数据的地方,而是应该把它放在一个模型文件中,并称之为单例

我的问题是,如果您将其从应用程序代理文件移到一个没有
application didFinishLaunchingWithOptions:
方法的文件中,如何确保托管对象上下文在您需要它的地方(即在其他视图控制器中)可用?换句话说,如果所有核心数据都在模型文件中,那么从控制器文件调用它或从模型文件将其提供给控制器文件的正确语法是什么


这个问题已经让我抓狂了两个星期,因此非常感谢您的建议。

请参考此示例:

github上有到源代码的链接,它显示了将coreData代码从AppDelegate移动到单独的模型类PersistentStack的一种方法。在本例中,AppDelegate仍然通过PersistentStack实例间接维护对托管对象上下文的引用


根据模块化的需要,还有许多其他方法可以将coredata代码分离到一个单独的类。

我已经阅读了本教程,毫无疑问,它的工作原理与我尝试过的其他教程类似,但我试图理解其一般原理。您能否建议代码使视图控制器可以使用托管对象上下文等。我是否将代码放在视图控制器中的模型类、视图加载或类似生命周期方法中?在app delegate版本中,代码位于app delegate ApplicationIDFinishLaunching中,即与核心数据堆栈相同的文件,但如果将其放入nsobject子类的模型文件中,则没有生命周期方法。救命啊!!!对不起,我误解了你的担心。不需要将managedObjectContext从AppDelegate的ApplicationIDFinishLaunching移动到单个模型对象。我还没有看到这样做。我已经看到了为另一个类(如上面的示例)创建managedObjectContext的实际代码。通常,对于完整的应用程序,您只使用一个managedObjectContext,在AppDelegate中设置它,并通过在带有managedObjectContext的viewController上设置属性将其传递给其他viewController。如果确实需要,您可以重写模型对象的init方法,这是ApplicationIDFinishLaunching中的代码:UINavigationController*navigationController=(UINavigationController*)self.window.rootViewController;IDTVC*控制器=(IDTVC*)navigationController.topViewController;controller.managedObjectContext=self.managedObjectContext;最后一行是抛出错误,尽管我包含了模型。是的,这是将managedObjectContext分配给ViewController的代码。你能告诉我错误是什么吗?