尝试访问核心数据时出错

时间:2012-10-01 02:36:21

标签: ios core-data nsmanagedobjectcontext

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

 *** 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;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

你这样做:

NSManagedObjectContext *context = [self managedObjectContext];

但是你可以访问它:

self.managedObjectContext

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

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

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

self.managedObjectContext = [self managedObjectContext];

答案 1 :(得分:1)

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

- (void)viewDidLoad
{

添加这段代码:

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