ios - +entityForName : could not locate an entity named 'myModel' in this model in core data - what's missing?

标签 ios objective-c xcode core-data

我现在正在构建基于 Core Data 的 iOS 应用程序,当我尝试通过在 AppDelegate 中执行 [NSEntityDescription insertNewObjectForEintityForName:@"myModel"inManagedObjectContext:_managedObjectContext]; 插入新的托管对象时.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 Controller 作为 Root View Controller ,当应用程序启动时,我想将导航 Controller 作为 tabbar Controller 的 Root View Controller ,并使用 tableview Controller 作为导航 Controller 的 Root View Controller 。在 TableView Controller 中,我想使用 Core Data 功能向用户显示大量实体。

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


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

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

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

或者是否有什么原因导致了这里的问题?或者我错过了什么?

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

谢谢。

最佳答案

正如上面评论中所讨论的,看起来您可能需要检查您的 ManagedObjectModel 是如何初始化的。

我个人建议避免将 Core Data 代码直接放在您的应用程序委托(delegate)中——我认为 Apple 的模板在这方面做的不是很好。查看this blog post作为设置核心数据堆栈所需的最少代码量的一个很好的例子,以及每个部分的作用的简要说明。

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

listcontroller.managedObjectContext = self.managedObjectContext;

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

关于ios - +entityForName : could not locate an entity named 'myModel' in this model in core data - what's missing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301153/

相关文章:

ios - 缩小导航栏中的图像

ios - NSFetchedResultsController didChangeObject 带有过滤 NSPredicate

swift - 使用自动布局时遇到问题 - 为什么在堆栈 View 下添加标签时会出现错误?

ios - iPhone 上最快的反平方根

iphone - 从不兼容类型 'AppDelegate *' 分配给 'id<UIApplicationDelegate>'

ios - 在 Objective C 类中使用 Swift 类和 swift 项目

ios - 使用不同版本的 Xcode 创建的分支在 git 中真的不同吗?

objective-c - runModalForWindow 限制 http 请求

ios - iTunes Connect 提交审核错误

ios - 索引处理文件 Xcode 超慢构建和运行