【发布时间】:2010-02-11 22:06:28
【问题描述】:
我想在我的数据库中有两个完全不相关的表,为此我在我的核心数据模型中定义了两个不同的实体。
除此之外,我有一个不同的 ViewController 使用这些实体中的每一个,因此我正在以这种方式初始化两个不同的 fetchedResultsController(每个 ViewController 中一个):
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event"
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
需要注意的是,MOM 只在基于 XCode 模板的 AppDelegate 中初始化一次。
当我在模型中只有一个 ViewController 和一个实体时,一切正常,但是即使我在模型中定义了第二个实体,我也无法让第二个 ViewController 初始化 fetchedResultsController(再次基于 XCode 模板)。我总是收到以下错误:
2010-02-11 22:02:55.078 JournalTool[3094:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'EventTag''
我可能遗漏了一些基本的东西并且做了一些非常愚蠢的事情,但我们将不胜感激。
谢谢,
保罗
【问题讨论】:
-
您是否对两个提取使用相同的托管对象上下文? (你应该)
-
是的,托管对象模型和托管对象上下文都在 AppDelegate 中初始化一次,我只是将相同的上下文传递给两个 ViewController,例如[tagsViewController setManagedObjectContext:self.managedObjectContext];
-
这可能听起来很傻,但是自从将第二个实体添加到模型中后,您是否重置了模拟器(假设您没有在设备上运行)或从中删除应用程序?也许它仍然有旧模型。
-
是的,我从设备和模拟器中删除了应用程序,重新启动模拟器并执行了几次完全干净的项目构建。我认为我只是在让两个 fetchedResultsControllers 引用一个 MOM 时做错了,但这里的 cmets 似乎没有暗示这一点。
-
见这里:developer.apple.com/mac/library/documentation/cocoa/Conceptual/… 它说的一件事是确保托管对象上下文不为零(内存地址为 0x0,如果您单步执行并将鼠标悬停在对象上)。你是如何设置 managedObjectContext 的?
标签: iphone objective-c core-data