+ entityForName:无法在核心数据中找到此模型中名为“myModel”的实体 - 缺少什么?

时间:2014-01-23 06:41:54

标签: ios objective-c xcode core-data

我现在正在构建基于Core Data的iOS应用程序,当我尝试通过在[NSEntityDescription insertNewObjectForEintityForName:@"myModel" inManagedObjectContext:_managedObjectContext];内执行AppDelegate.m来插入新的托管对象时,我收到了标题中描述的错误。

这是我的AppDelegate.h文件:


#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;

// maybe required?
//@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;

@end

这是我的AppDelegate.m文件(仅显示相关部分):


#import "AppDelegate.h"

#import "MyModel.h"
#import "listViewController.h"

@implementation AppDelegate

@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //managed object context settings
    UITabBarController *tabbarController = (UITabBarController *)self.window.rootViewController;
    UINavigationController *navigationController = [[tabbarController viewControllers] objectAtIndex:0];
    listViewController *listcontroller = [[navigationController viewControllers] objectAtIndex:0];

    listcontroller.managedObjectContext = self.managedObjectContext;

    NSLog(@"%@", _persistentStoreCoordinator.managedObjectModel);


    MyModel *newMyModel = [NSEntityDescription insertNewObjectForEntityForName:@"MyModel" inManagedObjectContext:_managedObjectContext];

    return YES;
}

在这个应用程序中,我想使用tabbar控制器作为根视图控制器,当应用程序启动时,我想将导航控制器作为tabbar控制器的根视图控制器,并使用tableview控制器作为导航控制器的根视图控制器。在表视图控制器中,我想使用Core Data功能向用户显示许多实体。

如果我在NSLog()输出的确切位置使用了断点,则它不会返回任何错误。当我向前移动一行输出日志消息时,以下输出返回:


() isEditable 0, entities {
}, fetch request templates {
}

这意味着由于某些原因我没有实体。

那么为什么在这种情况下没有实体呢?从this answer这里开始,我没有拼错我的实体名称。另外,我的objectModelContext未设置为nil。我是否设置了错误的托管对象?我在didFinishLaunchingWithOptions方法的前三行中做错了吗?

或者是否存在导致问题的原因?或者我错过了什么?

我使用的是iOS 7和Xcode 5,我的实体中没有任何托管对象 - 毕竟,当我尝试实例化这些托管对象时发生了错误。

感谢。

1 个答案:

答案 0 :(得分:2)

正如上面的评论中所讨论的,您可能需要检查ManagedObjectModel的初始化方式。

我个人建议避免将Core Data代码直接放在你的app代理中 - 我不认为Apple的模板做得很好。查看this blog post作为设置核心数据堆栈所需的最少代码量的一个很好的示例,以及每个部分所做的简要说明。

关于您的额外评论问题 - 只要您访问managedObjectContext属性,就会调用您拥有的managedObjectContext方法。所以,当你这样做时:

listcontroller.managedObjectContext = self.managedObjectContext;

这会调用managedObjectContext上的self方法,(如果我没记错的话)将初始化您的上下文。