访问其他类的核心数据数据库

Posted

技术标签:

【中文标题】访问其他类的核心数据数据库【英文标题】:Access to core data database in other class 【发布时间】:2012-04-08 10:48:45 【问题描述】:

我有一个从 AppDelegate 开始的核心数据数据库,我会这样做:

MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil] autorelease];

masterViewController.managedObjectContext = self.managedObjectContext;

这样我可以在主视图中访问数据库,然后我想访问其他类中的核心数据,我这样做:

id delegateContext = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [delegateContext managedObjectContext];

但是当我添加和访问信息时,当我尝试访问数据库的信息时,我在代码的各个部分都有一些错误的 Exc 访问和其他错误,所以我认为我可能使用了错误方式核心数据,从其他类访问信息。

也许我必须释放委托上下文?...我还没有在我使用过的任何类中释放它,如果我释放了它,我在哪里做?

谁能帮帮我?

【问题讨论】:

更新了答案。请检查.. 【参考方案1】:

问题是您在这两行中使用 id 类型的 delegateContext 而不是 NSManagedObjectContext 并将其分配给 *context

id delegateContext = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegateContext managedObjectContext]; 

当您需要保存或访问managedObjectContext 时添加这些行怎么样,检查它是否为nil 如果YESAppdelegate 复制它。

 if (managedObjectContext == nil) 
  
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@",  managedObjectContext);
 

只需尝试删除您的这两行并添加上面我建议的条件。应该可以。

更新 1:正如你所问的,我提到了创建步骤 Appdelegate 的实例来访问全局属性。

      #import "AppDelegate.h"

@implementation 之后创建Appdelegate 的实例

      AppDelegate *app;

viewDidLoad 方法中...

      app=(AppDelegate *)[[UIApplication sharedApplication]delegate];

【讨论】:

感谢您的回答,所以我必须在 .h 文件中声明 managedObjectContext 并在 dealloc 方法中释放它? 是的。在你决定使用核心数据的每个类中,你必须在 .h 文件中声明 managedObjectContext,在 .m 文件中合成和释放它.. 好的,非常感谢!今晚我尝试,但现在我接受答案:) AnyTime.. :-)) 肯定会工作,因为我目前的核心数据项目以这种方式工作完美...... 我试过了,但在这里给我一个错误:(AppDelegate *)和错误:使用未处理的标识符'AppDelegate'我必须在我的.m中导入AppDelegate.h?...或我不能放 (AppDelegate *) ?

以上是关于访问其他类的核心数据数据库的主要内容,如果未能解决你的问题,请参考以下文章

关于JAVA核心技术(卷一)读后的思考(内部类的讨论)

其他类题目

在位置后台模式下从核心数据访问数据

从 didFinishLaunchingWithOptions 访问核心数据时出现奇怪的崩溃

如何防止访问其他类的委托方法?

JAVA基础--继承