You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IceCream库SyncObject无法接受String作为uListElementType的解决方法咨询

解决IceCream库中List无法同步的问题

IceCream的uListElementType参数仅支持继承自Realm Object的自定义类,无法直接传入String这类基础类型。要同步List<String>类型的属性,需要把String包装成Realm对象,具体步骤如下:

  1. 创建String的包装类
    实现一个继承自Realm Object的类来包装字符串,同时添加IceCream同步必需的isDeleted字段:
@objc class PhoneNumber: Object {
    @objc dynamic var value = ""
    @objc dynamic var isDeleted = false // IceCream同步要求的删除标记字段
    
    override static func primaryKey() -> String? {
        return "value" // 以电话号码本身作为主键,也可根据需求自定义主键
    }
}
  1. 修改Recipient类的属性定义
    将原有的List<String>类型替换为包装类的List<PhoneNumber>,同时调整相关业务代码:
@objc class Recipient: Object {
    
    @objc dynamic var rec_id = ""
    @objc dynamic var firstName = ""
    @objc dynamic var lastName = ""
    var phoneNumbers = List<PhoneNumber>() // 修改为包装类的List
    @objc dynamic var email = ""
    @objc dynamic var colorTag = "#FFFFFFFF"
    @objc dynamic var isDeleted = false  // IceCream requirement
    
    override static func primaryKey() -> String? {
        return "rec_id"
    }

    // 示例:添加电话号码的方法
    func addPhoneNumber(_ number: String) {
        let phoneNumber = PhoneNumber()
        phoneNumber.value = number
        phoneNumbers.append(phoneNumber)
    }
}
  1. 更新SyncEngine的初始化配置
    将uListElementType指定为刚创建的PhoneNumber.self:
syncEngine = SyncEngine(objects: [
    SyncObject(type: Recipient.self, uListElementType: PhoneNumber.self),
    SyncObject(type: SMSSchedule.self, uListElementType: Recipient.self),
    SyncObject(type: Template.self),
    SyncObject(type: ContactsGroup.self, uListElementType: Recipient.self)
])

这样就能让IceCream正常同步原List<String>类型的电话号码数据了。

内容的提问来源于stack exchange,提问作者Muhammad Ibrahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:55:54