【问题标题】:Core data created with Objective C and fetch from Swift使用 Objective C 创建并从 Swift 获取的核心数据
【发布时间】:2018-02-15 11:50:50
【问题描述】:

我有一个使用核心数据并用Objective C编写的应用程序。这里我们没有使用persistentContainer。

现在我们用 Swift 重写了完整的应用程序,这个应用程序正在使用 Realm。

我想将一个数据库实体从核心数据迁移到领域并在此之后删除核心数据文件。

lazy var persistentContainer: NSPersistentContainer = {

    let container = NSPersistentContainer(name: "HitList")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
      if let error = error as NSError? {
        fatalError("Unresolved error \(error), \(error.userInfo)")
      }
    })
    return container
  }()

 var personData: [NSManagedObject] = []
            let managedContext = self.persistentContainer.viewContext

            let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person")
            do {
                offlineData = try managedContext.fetch(fetchRequest)
            } catch let error as NSError {
                print("Could not fetch. \(error), \(error.userInfo)")
            }


            if  (personData.count) > 0 { // Insert DB into Relam

            }

我收到以下错误

错误:未能加载名为 HitList 的模型 CoreData:错误:无法加载名为 HitList 的模型

在获取期间引发以下错误。

无法获取。错误域=Foundation._GenericObjCError Code=0 "(null)", [:]

怎么了?

【问题讨论】:

  • 你有核心数据对象的桥接头文件吗?
  • 我在swift应用程序中没有Objective C的.h和.m文件是否需要?
  • 可能有很多问题。如果您的模型没有更改,那么您似乎错误地加载了数据。您可以在代码中一步一步地查看正在发生的事情,这可能是用于初始化核心数据的大量代码......但您可以避免所有这些。只需将其保留在目标 C 中并使用桥接来快速迁移,而不是移植您无论如何都弃用的代码。为了让事情变得更好,我建议您使用旧代码创建一个新项目,并将其作为库/框架,然后可以将其包含在您的 swift 项目中。

标签: ios objective-c swift core-data realm-migration


【解决方案1】:

您遇到的问题是来自 Objective C 的 CoreData 堆栈将数据库保存到与 persistentContainer 不同的路径。因此,它不会找到它,因为它正在寻找不同的位置。 您可以连接设备并使用 iExplorer 检查它,您会看到。 要迁移它,您需要引用该位置。

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多