0

我正在使用 NSFetchedResultsController 来管理来自 Core Data 的数据,但我不断收到此异常:

012-05-10 21:54:32.142 test[939:fb03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'event''

这是我的代码

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"event" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                              initWithKey:@"date" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                        managedObjectContext:managedObjectContext sectionNameKeyPath:nil
                                                   cacheName:@"Root"];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;

}

有什么问题?谢谢

以下是我在数据模型和数据类中的内容

在此处输入图像描述

在此处输入图像描述

可能是我的插入数据代码有问题,所以我也发布了

- (IBAction)done:(id)sender
{

    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];


    NSString *name = _nameField.text;
    NSString *amount = _amountField.text;

    [newManagedObject setValue:[NSDate date] forKey:@"date"];
    [newManagedObject setValue:name forKey:@"name"];
    [newManagedObject setValue:amount forKey:@"amount"];
    [newManagedObject setValue:category forKey:@"category"];

    // Save the context.
    NSError *error = nil;
    if (![context save:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    [self.delegate addContentViewControllerDidSave:self];
}
4

3 回答 3

0

您尚未在托管对象上下文模型中添加实体事件。如果您已添加,则必须第一次将其删除。意味着在您更改数据模型后,它们不会第一次加载到内存中。你必须删除应用程序

于 2012-05-10T14:07:26.720 回答
0

这可能是因为您更改了数据模型但您没有更改NSManagedObject类。对于您更改的实体,这里应该是Event.h 。

于 2012-05-10T14:34:10.967 回答
0

确保实体被命名为“事件”而不是“事件”。实体应该以大写字母开头,而属性名称应该以小写字母开头。创建的标准实体被命名为“事件”,而不是“事件”。

编辑根据您的屏幕截图,该实体被命名为“事件”,而不是“事件”。此外,您的实体 NSManagedObject 子类应命名为“事件”而不是“项目”。选择实体,然后在主菜单上,单击编辑器->创建 NSManagedObject 子类。这将正确地创建它。

完成所有这些修复后,请确保重置模拟器或从模拟器中删除应用程序,然后再尝试再次运行它。

于 2012-05-10T14:37:40.347 回答