带有 Core Data 的 Cocoa pod 在消费应用程序中找不到实体
Posted
技术标签:
【中文标题】带有 Core Data 的 Cocoa pod 在消费应用程序中找不到实体【英文标题】:Cocoa pod with Core Data can not find entity in consuming app 【发布时间】:2017-01-11 15:57:44 【问题描述】:我创建了一个框架,它是一个 cocoapod,该框架使用核心数据,我的 pod 规范有:
s.resource_bundles =
'FrameworkModel' => ['Model/**/*.xcdatamodeld']
并且在框架工作空间中的不同目标的演示应用程序中一切正常,但是当我将它作为 pod 安装时,我得到了一个
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSFetchRequest could not locate an NSEntityDescription for entity name 'EntityName''
我不太确定要尝试什么,但我确实更改了数据模型文件上的模块名称,但没有任何效果。 (我从框架项目的名称转到“当前产品模块”并返回。
我确实在工作区的 pods 项目中看到了数据模型文件。
【问题讨论】:
【参考方案1】:我的问题是由我创建核心数据堆栈的方式引起的,特别是托管对象模型,我是从不作为 pod 使用者存在的捆绑包的 URL 创建的,所以现在它在定义中,我检查是否一个包可用,就像它在工作区中一样(用于演示应用程序),或者如果它存在于我的 pod 文件中定义的资源包的名称下,如下所示:
fileprivate lazy var managedObjectModel: NSManagedObjectModel =
// the moc's model should be accessible via apps in this workspace
// or through the module that cocoapods will create as part of the file's
// resource bundle, as such, we need to look in two different places
// to use the correct bundle at run time
var rawBundle: Bundle?
if let bundle = Bundle(identifier: "com.thefredelement.Framework")
return bundle
guard
let resourceBundleURL = Bundle(for: type(of: self)).url(forResource: "FrameworkModel", withExtension: "bundle"),
let realBundle = Bundle(url: resourceBundleURL) else
return nil
return realBundle
guard let bundle = rawBundle else
print("Could not get bundle that contains the model ")
return NSManagedObjectModel()
guard
let modelURL = bundle.url(forResource: self.model, withExtension: "momd"),
let model = NSManagedObjectModel(contentsOf: modelURL) else
print("Could not get bundle for managed object model")
return NSManagedObjectModel()
return model
()
【讨论】:
以上是关于带有 Core Data 的 Cocoa pod 在消费应用程序中找不到实体的主要内容,如果未能解决你的问题,请参考以下文章
[Cocoa]深入浅出 Cocoa 之 Core Data- 框架详解
如何在 Cocoa 文本输入系统中使用 Core Data?