gpt4 book ai didi

ios - 尝试让我的 CoreData 显示在我的应用程序中

转载 作者:行者123 更新时间:2023-11-29 04:42:34 25 4
gpt4 key购买 nike

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

现在我试图将 UIViewController 作为初始 View Controller (通过 Storyboard),但它一直给我这个错误 -

Cannot create an NSPersistentStoreCoordinator with a nil model

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

URLForResource:@"Model" withExtension:@"momd"]

确实如此,如果 UITableView 是 Root View ,我可以再次显示数据。

现在如果我改变:

- (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 文件。 - 问题是 - 如何使用我已有的设置运行应用程序并显示数据?

干杯杰夫


@response 对 Jeff Wolski 的第一个回答

感谢您的回答,我认为我走在正确的道路上 - 我必须对我的项目稍作修改才能消除错误。我知道有

AppDelegate appDelegate = (AppDelegate) [[UIApplication sharedApplication] delegate]; 

所以我把这就是

- (NSManagedObjectModel *)managedObjectModel {

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


我已经发布了我认为你想要的东西@Jody Hagins - 希望它有帮助:-)

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ViewToNav.sqlite"];

NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];


NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{

NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

return __persistentStoreCoordinator;
}

干杯杰夫

最佳答案

您需要在应用委托(delegate)中设置所有核心数据。托管对象模型需要是您的 View 可以访问的应用程序委托(delegate)中的属性。在您的 View Controller 中,您可以使用

获取应用程序委托(delegate)的 Hook
MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];

这将允许您从您喜欢的任何 View Controller 执行提取。

编辑:

我们需要在 View Controller 中拥有appDelegate的原因是这样我们就可以访问应用程序委托(delegate)中的NSManagedObjectContext。因此,您不需要将 NSManagedObjectModel 放入 View Controller 中。 NSManagedObjectContext (MOC) 使您可以访问应用委托(delegate)中已存在的整个核心数据堆栈。

在您的应用程序委托(delegate)中,您的 MOC 应设置为属性。现在您可以在 View Controller 中执行此操作。

myMOC = appDelegate.MOC;

现在,myMOC 让您可以访问您的核心数据。您将创建一个 NSFetchedResultsController 作为 View Controller 中的属性。在您的 getter 方法中,步骤之一是创建一个 NSEntityDescription。您可以在此处使用 self.myMOC,从而将 NSFetchedResultsController 与核心数据模型联系起来。

关于ios - 尝试让我的 CoreData 显示在我的应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com