1

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

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

masterViewController.managedObjectContext = self.managedObjectContext;

所以通过这种方式我可以访问主视图中的数据库,然后我想访问其他类中的核心数据,我这样做:

id delegateContext = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [delegateContext managedObjectContext];

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

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

任何人都可以帮助我吗?

4

1 回答 1

0

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

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

每当您需要保存或访问时添加这些行怎么样managedObjectContext,检查它nil是否YES复制它Appdelegate

 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];
于 2012-04-08T17:37:49.663 回答