如何在没有UIApllication委托帮助的情况下获得NSManagedObjectContext?

时间:2014-05-29 15:32:17

标签: ios objective-c core-data nsmanagedobjectcontext

我有一个简单的应用程序,我正在构建以巩固我对核心数据的一点知识。我的主要问题是我获取NSManagedObjectContext的方法返回nil。在斯坦福大学的一个关于核心数据的课程中,可以看到实现这一目标的方法。我做错了什么,但我不知道是什么(我的代码与课堂上显示的相似)...当然,结果是我的应用程序崩溃,抱怨&# 34; + entityForName:nil不是合法的NSManagedObjectContext参数,搜索实体名称...",当我尝试保存数据时,但我的上下文为零。

获取NSManagedObjectContext的代码:

- (void)setupFile {

NSURL *URL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentationDirectory
                                                     inDomains:NSUserDomainMask] lastObject];
URL = [URL URLByAppendingPathComponent:@"FlashCardCoreData"];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:URL];

if ([[NSFileManager defaultManager] fileExistsAtPath:[URL path]] == NO) {
    [document saveToURL:URL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
        if (success) {
            self.sharedContext = document.managedObjectContext;
        }
    }];
} else if (document.documentState == UIDocumentStateClosed) {
    // open the document
    [document openWithCompletionHandler:^(BOOL success) {
        if (success) {
            self.sharedContext = document.managedObjectContext;
        }
    }];
} else {
    self.sharedContext = document.managedObjectContext;
}
}

此类是一个单例类,用于共享全局上下文,我可以在所有控制器和表单中使用它来显示/保存对象...

注意:我没有使用应用委托中共享的全局上下文,因为我没有选择我的应用程序来使用核心数据(因此它不是委托中的可用属性) ,我不知道如果我的应用程序已经创建,我该如何更改。

任何人都可以帮助我吗?任何建议将不胜感激。

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

查看实现CoreData的正确方法的最简单方法是在设置项目选项时,只需创建一个新项目并选中“使用核心数据”复选框。

Check "Use Core Data"

这将注入初始化核心数据所需的所有样板代码。然后,您可以将其复制到您的单例类中。

然后,您需要制作托管对象数据模型。

Adding a new managed object model

完全配置数据模型后,只需为数据模型创建NSManagedObject子类。这将自动从数据模型文件中提取所有属性/关系。

这是一个很棒的tutorial,用于设置和实施核心数据。