核心数据fetchedResultsController错误'获取请求必须具有实体'entityForName返回nil

时间:2011-02-25 14:53:21

标签: xcode ios core-data nsfetchedresultscontroller

您好我设置了自己的coredata应用程序,或者我尝试了...
首先我创建了xdatamodel并生成了Modelclasses,之后我在AppDelegate中实现了核心数据的所有功能,我在生成的项目中找到了它。最后,我在tableViewController中复制了fetchedResultsController fetchedResultsController

- (NSFetchedResultsController *)fetchedResultsController {

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

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"ParameterGroup" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

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

[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return fetchedResultsController_;
}    

首先,我检查了managedObjectsController是否为!= nil,它有一个地址
然后我从entityForName中的xdatamodel复制了EntityName,
但是NSEntityDescricption实体是零。

如果我只是创建一个新对象,则异常说明该实体不存在

我是否必须将xdatamodel连接到我的项目? 希望你能帮助我 非常感谢!!!

2 个答案:

答案 0 :(得分:3)

此问题的最常见原因是错误地在代码中拼写错误的实体名称,使其与数据模型中的实体名称不匹配。

将实体名称从模型复制并粘贴到代码中,看看是否能解决问题。

答案 1 :(得分:1)

解决这个问题的最简单方法是,假设您没有对非核心数据部分进行大量编码,可能需要创建一个新项目,在其中选中“使用核心数据”框。如果您要使用导航栏,请选择此作为模板。如果我没记错的话,这将生成一个包含所有所需功能的表视图。您必须修改数据模型(生成)。

请注意,如果已安装并且您更改了数据模型,则必须从模拟器中删除该应用程序(否则生成的数据将与数据模型不一致,并且应用程序将崩溃)