Ios 试图在我的应用程序中显示我的CoreData

Ios 试图在我的应用程序中显示我的CoreData,ios,core-data,storyboard,Ios,Core Data,Storyboard,我正在四处玩,学习CoreData,当我得到一个测试应用程序,它以UITableView作为根,它可以很好地显示数据。这将告诉我它从中提取数据的数据库设置正确 现在,我尝试使用UIViewController作为初始视图控制器(通过故事板),但它一直给我这个错误- 无法使用nil模型创建NSPersistentStoreCoordinator 现在我已经阅读了很多论坛和教程,它们基本上都说我需要确保我的xcdatamodel文件与此匹配 URLForResource:@“模型”带扩展名:@“mo

我正在四处玩,学习CoreData,当我得到一个测试应用程序,它以UITableView作为根,它可以很好地显示数据。这将告诉我它从中提取数据的数据库设置正确

现在,我尝试使用UIViewController作为初始视图控制器(通过故事板),但它一直给我这个错误-

无法使用nil模型创建NSPersistentStoreCoordinator

现在我已经阅读了很多论坛和教程,它们基本上都说我需要确保我的xcdatamodel文件与此匹配

URLForResource:@“模型”带扩展名:@“momd”]

如果UITableView是根视图,我可以再次显示数据

现在如果我改变:

- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
    return __managedObjectModel;
}
  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model"     withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
为此:

- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
    return __managedObjectModel;
}
  //NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model"   withExtension:@"momd"]; // I have commented out this line because the NSURL is no longer being used.
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return __managedObjectModel;
 }
应用程序运行,但TableView为空,这对我来说很有意义,因为我没有链接到CoreData文件。-问题是-我如何使用已获得的设置运行应用程序并显示数据

干杯,杰夫


@对Jeff Wolski第一次回答的回应


谢谢你的回答,我认为我走的是正确的道路——我不得不对我的项目稍加修改,以消除错误。我知道你有

AppDelegate appDelegate = (AppDelegate) [[UIApplication sharedApplication] delegate]; 
所以我把这个放在

- (NSManagedObjectModel *)managedObjectModel {
区域-对吗?此外,它现在还提出了appDelegate变量未使用警告。这可能是一个简单的问题,但我现在在哪里使用该变量?干杯,杰夫


我已经发布了我认为你在寻找的@Jody Hagins-希望有帮助:-)


干杯Jeff

您需要在应用程序代理中设置所有核心数据。托管对象模型必须是应用程序委托中的属性,您的视图可以访问该属性。在视图控制器中,您可以使用

MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];
这将允许您从您喜欢的任何视图控制器执行提取

编辑:

我们需要将
appDelegate
放在视图控制器中的原因是,我们可以访问app delegate中的
NSManagedObjectContext
。因此,您不需要将
NSManagedObjectModel
放在视图控制器中。
NSManagedObjectContext
(MOC)允许您访问应用程序代理中已存在的整个核心数据堆栈

在应用程序代理中,应将MOC设置为属性。现在可以在视图控制器中执行此操作

myMOC = appDelegate.MOC;

现在
myMOC
允许您访问核心数据。您将在视图控制器中创建一个
NSFetchedResultsController
作为属性。在getter方法中,其中一个步骤是创建
NSEntityDescription
。这就是你使用你的
self.myMOC
,从而将你的
NSFetchedResultsController
绑定到你的核心数据模型。

你的persistentStoreCoordinator()是什么样子的?嗨,Jody,我已经添加了更多我认为你在问的代码:-)你在这里访问应用程序委托的代码是错误的。。你甚至没有使用指针。。。就在杰夫的帖子里。再去那里看看。另外,我认为你应该去看看苹果生成的代码,因为我认为你很困惑。简单方法:在Xcode中,选择New Project,然后选择Master Detail并检查CoreData Project。它将创建一个项目,其中有一个很好的示例说明如何实现这一点。我已经检查并重新检查了核心数据项目-模板从一个很酷的UITableView控制器开始,但我需要它从一个普通的UIViewController开始,然后通过一个转到Segue的按钮访问TableViewController。这就是我被困的地方。谢谢你的回答,我认为我走在了正确的道路上——我不得不对我的项目稍微修改一下,以消除错误。我知道有AppDelegate AppDelegate=(AppDelegate)[[UIApplication sharedApplication]delegate];所以我把它放在“-(NSManagedObjectModel*)managedObjectModel{”区域-正确吗?它现在提出了appDelegate变量未使用警告。可能是一个简单的问题,但我现在在哪里使用该变量?Cheerri复制了我对问题的回答,以避免代码混淆。Cheerresok,我现在开始理解它,但仍然要寻找写此-tha的地方nks的提示。如果我有任何其他问题,我可能会发回:-)
myMOC = appDelegate.MOC;