【问题标题】:Core Data fetchedResultsController errors 'A fetch request must have an entity' entityForName returns nil核心数据 fetchedResultsController 错误'获取请求必须有一个实体' entityForName 返回 nil
【发布时间】:2011-02-25 14:53:21
【问题描述】:

您好,我设置了自己的 coredata 应用,或者我尝试过...
首先,我创建了 xdatamodel 并生成了 Modelclasses,之后我在 AppDelegate 中实现了我在生成的项目中找到的所有 core-data 功能。最后,我将 fetchedResultsController 复制到了 TableViewController 中。
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,
但 NSEntityDescription 实体为 nil。

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

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

【问题讨论】:

    标签: xcode ios core-data nsfetchedresultscontroller


    【解决方案1】:

    此问题的最常见原因只是代码中的实体名称拼写错误,导致它与数据模型中的实体名称不匹配。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 焦土调试。有时,你只需要这样做。
      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2019-11-06
      • 2014-08-17
      • 2019-08-07
      相关资源
      最近更新 更多