Iphone 一个核心数据模型中的多个不相关实体

Iphone 一个核心数据模型中的多个不相关实体,iphone,objective-c,core-data,Iphone,Objective C,Core Data,我希望在数据库中有两个完全不相关的表,为此,我在核心数据模型中定义了两个不同的实体 除此之外,我有一个不同的ViewController使用这些实体中的每一个,因此我以这种方式初始化两个不同的fetchedResultsController(每个ViewController中一个): // Create the fetch request for the entity. NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; /

我希望在数据库中有两个完全不相关的表,为此,我在核心数据模型中定义了两个不同的实体

除此之外,我有一个不同的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''
我可能错过了一些基本的东西,做了一些非常愚蠢的事情,但这里的任何帮助都将不胜感激

谢谢,

Paul

可能是传递给第二个视图控制器的
managedObjectContext
实际上是
nil
。打电话之前

[tagsViewController setManagedObjectContext:self.managedObjectContext];
验证
self.managedObjectContext
不是
nil

if(!self.managedObjectContext){
  NSLog(@"invalid managedObjectContext");
  // now get a valid managedObjectContext
  // and pass it to your view controller  
}

可能是传递给第二个视图控制器的
managedObjectContext
实际上是
nil
。打电话之前

[tagsViewController setManagedObjectContext:self.managedObjectContext];
验证
self.managedObjectContext
不是
nil

if(!self.managedObjectContext){
  NSLog(@"invalid managedObjectContext");
  // now get a valid managedObjectContext
  // and pass it to your view controller  
}

两次回迁是否使用相同的托管对象上下文?(您应该是)是的,托管对象模型和托管对象上下文都在AppDelegate中初始化一次,我只是将相同的上下文传递到两个ViewController中,例如[tagsViewController setManagedObjectContext:self.managedObjectContext];这听起来可能很傻,但是自从将第二个实体添加到模型后,您是否重置了模拟器(假设您没有在设备上运行)或从中删除了应用程序?是的,我从设备和模拟器中删除了应用程序,重新启动了模拟器,并多次执行了完全干净的项目构建。我认为让两个FetchedResultsController引用一个MOM只是做错了什么,但这里的注释似乎并没有说明这一点。请看这里:它说的一件事是确保托管对象上下文不为零(内存地址为0x0,如果您正在单步遍历并将鼠标悬停在对象上)。如何设置managedObjectContext?两次回迁是否使用相同的托管对象上下文?(您应该是)是的,托管对象模型和托管对象上下文都在AppDelegate中初始化一次,我只是将相同的上下文传递到两个ViewController中,例如[tagsViewController setManagedObjectContext:self.managedObjectContext];这听起来可能很傻,但是自从将第二个实体添加到模型后,您是否重置了模拟器(假设您没有在设备上运行)或从中删除了应用程序?是的,我从设备和模拟器中删除了应用程序,重新启动了模拟器,并多次执行了完全干净的项目构建。我认为让两个FetchedResultsController引用一个MOM只是做错了什么,但这里的注释似乎并没有说明这一点。请看这里:它说的一件事是确保托管对象上下文不为零(内存地址为0x0,如果您正在单步遍历并将鼠标悬停在对象上)。如何设置managedObjectContext?MOC本身不是nill,但这让我想到了ViewController的排序。我实际上是想把MOC传递给一个子视图控制器,因此它是第二个视图控制器本身,在这一点上是零。因此,我改变了情况,以便我的子视图在viewDidLoad方法中从其父视图检索MOC,即self.managedObjectContext=parentViewController.managedObjectContext;非常感谢您帮助解决此问题,非常感谢。为了避免此类问题,我总是直接从应用程序委托中检索managedObjectContext,这在我实例化的任何视图控制器中都是可用的。这是一个好主意,听起来更安全。将来,我将确保所有ViewController都有对AppDelegate的引用,然后直接在viewDidLoad方法中检索它。再次感谢。MOC本身不是nill,但这让我想到了我的ViewController的订购。我实际上是想把MOC传递给一个子视图控制器,因此它是第二个视图控制器本身,在这一点上是零。因此,我改变了情况,以便我的子视图在viewDidLoad方法中从其父视图检索MOC,即self.managedObjectContext=parentViewController.managedObjectContext;非常感谢您帮助解决此问题,非常感谢。为了避免此类问题,我总是直接从应用程序委托中检索managedObjectContext,这在我实例化的任何视图控制器中都是可用的。这是一个好主意,听起来更安全。将来,我将确保所有ViewController都有对AppDelegate的引用,然后直接在viewDidLoad方法中检索它。再次感谢。