我有一个名为“Model”的模型文件。如果我将其重命名为“SomeOtherName”,它就不会被加载。
initWithContentsOfURL
返回nil并且:
mergedModelFromBundles: [NSArray arrayWithObjects:[NSBundle mainBundle], nil];
...崩溃因为它认为这个数组中有零。
我被允许重命名我的模型,所以有什么不对吗?我无法提供更多信息,因为我没有:P SomeOtherName模型放在包中,它应该加载得很好。
由于
答案 0 :(得分:26)
我遇到了同样的问题。以下是我解决它的方法:
单独重命名模型文件是不够的,因为它不会重命名对当前模型版本的引用。
事实证明,模型版本存储在单独的plist文件中。只需在文本编辑器中打开它,然后将旧名称更改为新的模型文件名。
档案:YourNEWModelFile.xcdatamodeld/.xccurrentversion
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>YourModelFile.xcdatamodel</string> <-- Change this to YourNEWModelFile
</dict>
</plist>
请注意,如果您在开发期间重命名模型文件,则仅应执行此操作。要将数据模型迁移到新版本,请遵循核心数据文档。
答案 1 :(得分:2)
最可能的原因是新名称未包含在构建目标中。检查目标是否包含文件,并确保新名称存在。如果没有,请添加它。如果旧文件名在那里删除它,则在添加新文件名之前。
如果它位于构建目标中,请确认新文件保留.xcdatamodel
扩展名。检查构建的产品包以确认它包含具有新名称的.mom
或.momd
文件。
您的mergedModelFromBundles:应该如下所示:
NSManagedObjectModel *mom=[NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:[NSBundle mainBundle]];
......或:
NSManagedObjectModel *mom=[NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObjects:[NSBundle mainBundle],nil] ];
答案 2 :(得分:1)
使用Xcode 7.2.1:
答案 3 :(得分:1)
最近,当我向数据模型实体添加新属性时,我遇到了这个问题。
我必须做以下事情:
Entity+CoreDataClass.h
和Entity+CoreDataClass.m
文件的内容复制到文本编辑器,以便保存我为该类创建的自定义属性(例如计算出的属性)Entity+CoreDataClass.h
,Entity+CoreDataClass.m
,StockEntity+CoreDataProperties.h
,&amp; StockEntity+CoreDataProperties.m
.xcdatamodelId
文件Editor -> Create NSManagedObject Subclass...
Entity+CoreDataClass.h
和Entity+CoreDataClass.m
个文件Entity+CoreDataClass.m
列表中删除Compile Sources
文件.xcdatamoelId
文件添加到Compile Sources
列表。然后我成功地构建并运行了该项目。
答案 4 :(得分:1)
这对我有用:
(检查AppDelegate中的名称是否与您的xcdatamodel文件相同。 - &GT; let container = NSPersistentContainer(name:&#34; YourName&#34;)......)
答案 5 :(得分:0)
您的Core Data初始化代码如何?它应该是这样的:
NSManagedObjectModel *managedObjectModel = nil;
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"SomeOtherName" withExtension:@"mom"];
NSAssert(modelURL != nil);
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];