尝试访问核心数据时出错
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 子类访问获取的实体时出错