2

我创建了一个框架,它是一个 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 项目中看到了数据模型文件。

4

1 回答 1

0

我的问题是由我创建核心数据堆栈的方式引起的,特别是托管对象模型,我是从一个不作为 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
}()
于 2017-01-11T18:50:00.620 回答