我对Objective C相对较新。到目前为止,在我击中CoreData之前,一切都进展顺利。我只是无法让它工作!花了很多时间做一些看起来非常简单的事情后,我的斗智尽头。
请帮我弄清楚我做错了什么:
recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:managedObjectContext]
;
我收到以下错误:
terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'RecipeData'
这引出了我的三个大问题:
因为我选中了'使用Core Data进行存储',所以似乎以下代码会自动注入到app delegate中.h:
@private NSManagedObjectContext * managedObjectContext _;
NSManagedObjectModel *managedObjectModel_;
NSPersistentStoreCoordinator *persistentStoreCoordinator_;
@property(nonatomic,retain,readonly)NSManagedObjectContext * managedObjectContext;
这会干扰我正在使用的代码吗?
另外一个小问题,当我在我的代码上方添加以下内容时:
if(managedObjectContext == nil){
NSLog(@“NO CONTEXEX”);
}
控制台打印“NO CONTEXT”
我非常感谢任何帮助。感谢。
答案 0 :(得分:0)
managedObjectContext
来自哪里?这是managedObjectContext_
的拼写错误吗?项目模板创建后者,而不是前者。使用上面的代码和标准项目模板提供的代码应该会产生语法错误。我猜你已经重命名了一些东西?
您好像使用managedObjectContext
作为ivar。这是一个属性。在类中,有一个私有的managedObjectContext_
ivar,它保存对象上下文的引用。你不应该访问它。您应该访问managedObjectContext
属性。首次访问此属性时,其getter方法将为您创建上下文。由于您没有访问该属性,因此不会调用getter方法,也不会创建上下文。
你有这样的代码:
recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:managedObjectContext];
...你应该使用这样的代码:
recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:self.managedObjectContext];
注意self.
位。这意味着您正在访问self
对象上的属性,而不是从调用该方法的对象访问ivar。
请注意,读取属性与调用getter方法相同,因此上面的内容也可以写成:
recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:[self managedObjectContext]];