找不到实体名称的NSManagedObjectModel-Universal App

|| 我的应用程序中出现一个奇怪的错误,内容为: *由于未捕获的异常\'NSInternalInconsistencyException \'而终止应用程序,原因:\'+ entityForName:找不到实体名称\'Book \'的NSManagedObjectModel 我知道,这里和网络上都有\“找不到实体名称的NSManagedObjectModel \”的数百个标题,但是奇怪的是,这是一个通用应用程序,而iphone应用程序始终可以正常工作,只有ipad应用程序在启动时崩溃。 在主AppDelegate中,有两种方法中的一些代码,而在iphone / ipad AppDelegate中,我在applicationdidFinishLaunchingWithOptions中调用此代码,如下所示:
    if ([self modelExists] == NO) {
    [self buildModel];
}
因此,这与我调用代码的方式相同,但是ipad版本崩溃了,而iphone版本没有崩溃。 唯一的不同是iPhone版本使用TabBarContoller(在IB中设置),而iPad版本使用单个viewController(也在IB中设置)。 它发生在模拟器和设备上。 我不知道该怎么做。希望你能理解我的意思... 多谢 塞巴斯蒂安 编辑: 我发现,当我运行iPhone版本时,应按原样调用主AppDelegate中的代码,但是当我运行iPad版本时,将根本调用主appDelegate的NONE代码,因此没有创建managedObject,并且错误的原因。但是,为什么在主AppDelegate中没有代码运行?谢谢 编辑2: 这是我现在的主AppDelegate中的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([self modelExists] == NO) { // Checks if the model is allready filled up or not. (Uses  CoreData stuff of course)
// iPhone Version is fine here. iPad Version crashes.
    [self buildModel];
}    

[self buildInterface]; // Called in the iPhone or iPad AppDelegate to make the window visible etc.
return YES;
}
因此,FinishLaunchingWithOptions在iPhone和iPad版本中被调用。 iPad版本无论如何都不会运行coredata内容,而iphone版本却会按原样运行coredata内容。知道有什么问题吗?谢谢!     
已邀请:
        如果只是未将其设置为应用程序的委托,则应用程序委托可能未运行任何代码。 在iPad的主NIB中查找,并确保将\“ AppName App Delegate \”设置为该NIB的文件所有者的委托。     
        我发现了问题。真的很奇怪... 它是“ modelExists”的代码
- (BOOL)modelExists {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@\"Book\" inManagedObjectContext:__managedObjectContext]; //<- Crashed. Had to change it to self.managedObjectContext
request.predicate = nil;
NSError *error = nil;
...
塞巴斯蒂安     
        我有同样的问题。我的应用程序在开发中运行了好几个星期,然后突然因该错误而崩溃。通过将managedObjContect更改为[selfmanagedObjectContext],可以解决此问题。 我很想知道为什么....那里有专家吗?为什么原始代码能够将对ManagedObjectContext的调用解析为成员函数的实现。。。突然之间无法实现?据我所知,此代码没有其他静态实现可见。 感谢您发布此信息,为我节省了许多时间。     
        在我的项目中,我有一个导航控制器,当我尝试连接到子视图控件时遇到此错误。 问题是我需要通过设置managedObjectContext。这取自CoreDate主/详细信息示例。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@\"showDetail\"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        [[segue destinationViewController] setDetailItem:object];
        // set the managedObjectContext, too, if you need it
        [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
    }
}
另外,请仔细检查Interface Builder中的segue标识符是否与该函数中的标识符匹配(此示例中的showDetail)。     

要回复问题请先登录注册