【发布时间】:2017-06-01 14:16:24
【问题描述】:
我正在尝试在我的 Cocoa Touch 框架中使用 CoreData。我创建了一个简单的项目作为示例:
https://github.com/JakubMazur/SO41698466
基本上我是按步骤做的:
- 使用单元测试创建框架
- 将
CoreData添加到项目someDataModel - 用一些虚拟实体填充
CoreData,并将模块更改为Current Product Module - 然后我创建了
SomeClass,它基本上被称为 :
.
public class func entityCreation() {
Entity(context: CoreDataClass().persistentContainer.viewContext)
}
因此,使用来自 CoreData 的 lazy 自动生成的代码,这应该可以创建模型。
- 在测试中我写道:
.
func testExample() {
SomeClass.entityCreation()
}
- 然后触发测试
- 在
CoreDataClass中,我在行下方放置了一个断点:let container = NSPersistentContainer(name: "someDataModel")然后我在控制台看到:
[error] 错误:无法加载名为 someDataModel 的模型 CoreData:错误:无法加载名为 someDataModel 的模型
所以我有两个问题:
- 是否可以在框架中包含核心数据
- 如果 1 为真,也许我应该使用不同的
NSPersistentContainer名称?有一种方法可以检查我应该放什么?
在此处下载项目:https://github.com/JakubMazur/SO41698466
在下方找到并添加解决方案
let modelURL = Bundle(for: type(of: self)).url(forResource: "someDataModel", withExtension: "momd")!
let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)
let container = NSPersistentContainer(name: "someDataModel", managedObjectModel: managedObjectModel!)
【问题讨论】:
-
这似乎比它应该更难修复。 NSPersistentContainer 似乎无法在主包中找到模型,可能是因为您正在构建一个框架。您可以通过自己查找和指定模型来克服这个障碍,然后使用 NSPersistentContainer 的
name: managedObjectModel:初始化程序,但随后您遇到了不同的问题... -
哈,这是很好的线索@jrturton!当然,这不是主要的 Bundle。我修复了它:
let modelURL = Bundle(for: type(of: self)).url(forResource: "someDataModel", withExtension: "momd")! let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL) let container = NSPersistentContainer(name: "someDataModel", managedObjectModel: managedObjectModel!)谢谢! -
然后我收到无效的实体描述警告,我意识到我需要回去工作了,抱歉...
标签: ios swift core-data cocoa-touch