【问题标题】:Realm Model Conversion Failed领域模型转换失败
【发布时间】:2019-05-25 10:15:14
【问题描述】:

我有一个领域数据库模型,例如:

import RealmSwift

class User: Object {

    let isVerified = RealmOptional<Bool>()   
    @objc dynamic var pk = 0
    @objc dynamic var profilePicUrl: String? = nil
}

我正在从服务中获取数据,它返回与领域模型相同的名称和类型。

我想将此数据保存到数据库。但是当我尝试将模型转换为realm model 时会出错。

let data = [Users(value: serviceUser)] -> serviceUser comes from service.

在我尝试转换时保存之前出现此错误:

'RLMException',原因:'无效值'ServiceUserModel(isVerified: Optional(false), pk: Optional(123456), profilePicUrl: Optional("") of type '__UserDataValue' for 'bool' property 'Users.isVerified '。'

服务用户模型:

public struct ServiceUserModel: Codable {
    public var isVerified: Bool?    
    public var pk: Int?
    public var profilePicUrl: String?
}

由于性能问题,我不想使用for 循环。我想一次性保存这些数据。

保存方法:

func save(users: [Users]){

        try! database.write {
            database.add(users)
        }
    }

如何转换?

【问题讨论】:

  • 您已将 pk var 定义为 ServiceUserModel 中的可选变量,但在您的 Realm 对象 User 中它不是可选的。
  • 您还提到了使用 for 循环保存数据和性能问题。您能否提供有关这意味着什么以及您遇到的性能问题类型的代码?

标签: swift realm


【解决方案1】:

我认为问题出在这里:

当我尝试转换时

在处理 RealmOptional 时,您必须将其设置为 .value 属性。

let isVerified = RealmOptional&lt;Bool&gt;() 现在 isVerified.value 为零

isVerified.value = true 现在是真的

但您不能使用Bool? 来设置值。

这同样适用于pk

您应该实现convenience init() 并为您的选项提供一些默认值

【讨论】:

  • 但是这样我需要for循环在db中插入数据。我错了吗?有没有什么方法可以不循环插入数据?
  • 您可以使用.maplet realmUsers = serviceUsers.map { User(withServiceStruct...) }
猜你喜欢
  • 2012-06-21
  • 2010-12-20
  • 2014-01-05
  • 2012-09-04
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多