访问其他类的核心数据数据库
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
如果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];
【讨论】:
感谢您的回答,所以我必须在 .h 文件中声明 managedObjectContext 并在 dealloc 方法中释放它? 是的。在你决定使用核心数据的每个类中,你必须在 .h 文件中声明managedObjectContext
,在 .m 文件中合成和释放它..
好的,非常感谢!今晚我尝试,但现在我接受答案:)
AnyTime.. :-)) 肯定会工作,因为我目前的核心数据项目以这种方式工作完美......
我试过了,但在这里给我一个错误:(AppDelegate *)和错误:使用未处理的标识符'AppDelegate'我必须在我的.m中导入AppDelegate.h?...或我不能放 (AppDelegate *) ?以上是关于访问其他类的核心数据数据库的主要内容,如果未能解决你的问题,请参考以下文章