只是试图进入核心数据的东西,并立即从头开始。在我的AppDelegate中,我有以下代码:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
其中@“DataModel”是我的.xcdatamodel文件的名称 - 这是正确的吗?
答案 0 :(得分:12)
将“妈妈”改为“妈妈”对我有用。一旦我将语法修改为:
,Marcus S. Zarra的答案对我也有用managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
虽然我不知道那条线是什么。
编辑:我做了更多的研究,现在我知道上面的内容是什么以及它为何起作用/不起作用。上面的行将在您的项目中搜索所有模型,并将它们添加到xcdatamodel。如果您不使用版本化模型,则此方法有效。但是,如果您将来切换到使用版本化模型,则会导入所有版本的模型,这样您就可以同时获得旧的和新的模型,这不是您想要的。所以解决方案是做两件事之一。如果要使用非版本化模型,请使用以下行来获取模型:
NSString *modelPath = [[NSBundle mainBundle]
pathForResource:@"DataModel" ofType:@"mom"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
如果要使用版本化模型(推荐),请选择模型并运行Design - >数据模型 - >从菜单栏添加模型版本以创建版本化模型。这将自动将模型的扩展名从xcdatamodel更改为xcdatamodeld。完成此操作后,请使用以下行:
NSString *modelPath = [[NSBundle mainBundle]
pathForResource:@"DataModel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
请注意,唯一的区别是ofType参数从@“mom”变为@“momd”。我希望这能澄清每个试图理解CoreData.D
的人的情况答案 1 :(得分:9)
将此更改为
通常更容易managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
然后,如果是妈妈或妈妈,你仍会得到模特。