尝试访问核心数据时出错

Posted

技术标签:

【中文标题】尝试访问核心数据时出错【英文标题】:error trying to access core data 【发布时间】:2012-10-01 02:36:20 【问题描述】:

我正在尝试获取我保存在一个核心数据对象中的值,但是我不断收到此错误

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Man''

结果错误发生在我编写的代码中,它尝试访问核心数据对象然后记录其内容,如下所示。

if ([manufDBVNumber isEqualToNumber:currentDBVersion]) 
        // READ FROM CORE DATA
        // WRITE TO CORE DATA
        NSManagedObjectContext *context = [self managedObjectContext];

        NSLog(@"%@", context);

        // Test listing all FailedBankInfos from the store
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Man" inManagedObjectContext:self.managedObjectContext]; // This is where the error is happening.
        [fetchRequest setEntity:entity];

        NSError *error;


        NSMutableArray *manufacturerDictionaryArray = [[NSMutableArray alloc] init];


        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
        for (Manuf *manuf in fetchedObjects) 
            NSLog(@"MANA: %@", man.mana);
            NSLog(@"SURGE: %@", man.surge);
            NSLog(@"HEALTH: %@", manuf.health);


etc//....

这就是我合成 managedObjectContext 和 fetchedResultsController 的方式

// Core-Data variables used for fetching and managing the object
@synthesize fetchedResultsController = __fetchedResultsController;
@synthesize managedObjectContext = __managedObjectContext;

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

你这样做:

NSManagedObjectContext *context = [self managedObjectContext];

然后你访问这个:

self.managedObjectContext

假设您的 NSLog(@"%@", context); 显示有效的 NSManagedObjectContext,那么我会这样做:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Man" inManagedObjectContext:context];

或者,将您的原始声明更改为:

self.managedObjectContext = [self managedObjectContext];

【讨论】:

当我将其更改为 contect 这是我得到的错误。 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil 不是搜索实体名称“Man”的合法 NSManagedObjectContext 参数***而我的 NSLog Context 它只是重新登录 (空) 嗯,你的问题之一。 [self managedObjectContext] 返回 null。你是如何实现这个方法的?你真的设置过 self.managedObjectContext 吗? 好吧,我发现了这个问题,这就是让我兴奋的地方,我已经在使用同一个 coredata 对象,但由于某种原因,它在这个视图中不起作用.. 我想这可能是我的代码但实际上这是因为我只取消了它以在一个“其他视图”中工作。你知道如何让它在两个视图中工作吗? 你必须传递对象。这很常见,如果您查看 Apple 的示例代码,您可以了解他们是如何做到的。最简单的方法是在创建视图时设置 managedObjectContext 属性。 是的,我现在正在这样做.. 但我试图以两种不同的视图访问它,我现在正在考虑最好的方法是什么?【参考方案2】:

在您的 viewController.m 实现文件中,就在这段代码下面:

- (void)viewDidLoad

添加这段代码:

id delegate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [delegate managedObjectContext];

【讨论】:

谢谢,谢谢,罗尔斯企业。我在同一个问题上苦苦挣扎的时间比我承认的要长,你简单的代码行已经彻底解决了这个问题。我说谢谢了吗?

以上是关于尝试访问核心数据时出错的主要内容,如果未能解决你的问题,请参考以下文章

Swift Core Data - 使用 NSManagedObject 子类访问获取的实体时出错

更新 WAMP 后尝试访问数据库时出错

尝试访问 Laravel 4 中的关系数据时出错

Nuxt.js Typescript - 尝试访问计算属性中的数据对象时出错

保存到与核心数据的许多关系时出错

使用核心数据时出错