我有一个简单的应用程序,我正在构建以巩固我对核心数据的一点知识。我的主要问题是我获取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;
}
}
此类是一个单例类,用于共享全局上下文,我可以在所有控制器和表单中使用它来显示/保存对象...
注意:我没有使用应用委托中共享的全局上下文,因为我没有选择我的应用程序来使用核心数据(因此它不是委托中的可用属性) ,我不知道如果我的应用程序已经创建,我该如何更改。
任何人都可以帮助我吗?任何建议将不胜感激。
感谢您的关注。
答案 0 :(得分:0)
查看实现CoreData的正确方法的最简单方法是在设置项目选项时,只需创建一个新项目并选中“使用核心数据”复选框。
这将注入初始化核心数据所需的所有样板代码。然后,您可以将其复制到您的单例类中。
然后,您需要制作托管对象数据模型。
完全配置数据模型后,只需为数据模型创建NSManagedObject子类。这将自动从数据模型文件中提取所有属性/关系。
这是一个很棒的tutorial,用于设置和实施核心数据。