带有 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 在消费应用程序中找不到实体的主要内容,如果未能解决你的问题,请参考以下文章

代号 1 带有 Cocoa Pods 构建错误的本机实现

[Cocoa]深入浅出 Cocoa 之 Core Data- 框架详解

如何在 Cocoa 文本输入系统中使用 Core Data?

与 Core Data 相关的 Cocoa 错误 19

Cocoa Touch 从 Core Data 更新 UITableView

使用 Cocoa 和 Core Data 自动保存