我现在正在构建基于 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/