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