我第一次使用Core Data,但我对一些事情感到困惑。
首先让我解释一下我的应用程序的上下文。它本质上是一个虚拟的计划者,就像你在高中/中学那样,课程开始/结束时孩子们应该写作业。我正在尝试使用核心数据来保存大约11,000个这些期间对象并查询它们以获取某一天的期间。
我遇到的问题是我在AppDelegate中初始化NSManagedObjectContext
和NSManagedDocument
,以便在应用启动后立即加载句点。我现在想要从不同的类(DayView)查询Core Data中的那些句点对象。如何从DayView.m创建对Core Data数据库的引用,以便我可以查询它? [alloc init]
AppDelegate实例为了访问NSManagedObjectContext
所拥有的属性,对我来说似乎很奇怪。
感谢您的所有帮助,我很乐意澄清评论中的任何内容。
答案 0 :(得分:0)
请勿在您的申请代表中执行此操作。它被称为应用程序委托,因为它应该完成与UIApplication
委托相关的那些事情。如果您不使用故事板,可能选择进入UI状态恢复,并处理分配到达代表的推送通知令牌之类的事情,那么除了启动第一个视图控制器之外,它真的不应该做更多的事情。
将您的Core Data内容分解为自己的类。让其他人通过那堂课说话。 The singleton pattern是一种常见的方法,可以防止您必须在整个地方传递该类的实例,如果它只是一个简单的设计事实,那么它只是其中之一。
答案 1 :(得分:0)
执行此操作的首选方法是创建 NSManagedObjectContext(以及它的依赖性),无论是在首次需要时还是在应用程序启动时。
然后Core Data Programming Guide,Core Data Snippets和Core Data Release Notes for MacOS 10.7 and iOS 5涵盖了这一点。在这三个来源中,发行说明文件是最新的。从发行说明:
嵌套上下文使得采用“传递接力棒”方法访问上下文(通过将上下文从一个视图控制器传递到下一个)而不是直接从应用程序委托中检索它比以往任何时候都更重要。
(是的,你应该使用嵌套的上下文。)
答案 2 :(得分:-1)
你没有分配它的实例;您可以访问App Delegate&它的属性
[UIApplication sharedApplication] delegate]
但我建议你为自己保留一些悲伤并创建一个包含所有核心数据内容的数据助手类。它可以在App Delegate中初始化,然后根据需要从那里引用。我用这个:
dataHelper = [(AppDelegate *)[[UIApplication sharedApplication] delegate] dataHelper];
然后让dataHelper拥有核心数据访问所需的所有代码。