【问题标题】:adding a codable model to realm swift向领域迅速添加可编码模型
【发布时间】:2019-06-19 10:53:15
【问题描述】:

我正在尝试将 Codable 模型添加到领域数据库。模型有效,值是从 API 调用传递的,但是我想在我的 Realm 数据库中创建一个 Array 所以当我点击保存按钮,模型被添加到数据库中。

我是如何在创建时遇到此错误的

无法转换“数据”类型的值?到预期的参数类型 '对象'

func create<T: Object>(_ objects: [T]) where T: Codable {
        do {
            let placesData = try? JSONEncoder().encode(objects)
            try realm.write {
                realm.add(placesData)
            }
        } catch {
        }
    }

保存在 UserDefaults 中是这样的

private func putModelArray<T>(_ value: [T]?, forKey key: String) where T: Codable {
        guard let value = value else {
            storage.removeObject(forKey: key)
            return
        }
        let placesData = try? JSONEncoder().encode(value)
        storage.setValue(placesData, forKey: key)
    }

【问题讨论】:

  • 将所有值从 Data 中提取到您的类对象中,然后将您的类对象放入领域。
  • @AsadAliChoudhry 你能显示代码示例吗
  • 将领域对象编码为 JSON 并将其保存在数据库中的目标是什么?
  • 您可以打印 placesData 变量并添加到您的问题中吗?
  • 如果您已经有一个对象数组,为什么要在保存到领域之前对其进行 JSON 编码?只需realm.add(objects)

标签: swift realm codable


【解决方案1】:

这个

realm.add(placesData)

在您向其发送 Data 时接受 object 参数

如果您从 json 获取数据并为此使用 Decodable,这并不意味着您必须使用 Encodable

【讨论】:

  • 那么如何在 Realm 中保存它?因为我无法将 Codable 模型原样保存到数据库中
  • 使用Realm,必须符合Encodable
  • 试试realm.add(objects) compile ?
  • Cannot convert value of type 'UInt8?' to expected argument type 'Object'
猜你喜欢
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2010-12-20
  • 2015-10-13
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多