【问题标题】: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;

任何帮助将不胜感激。

【问题讨论】:

    标签: ios core-data nsmanagedobjectcontext


    【解决方案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];
    

    【讨论】:

    • 谢谢,谢谢,罗尔斯企业。我在同一个问题上苦苦挣扎的时间比我承认的要长,你简单的代码行已经彻底解决了这个问题。我说谢谢了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多