使用ObjectMapper时字符串数组无法存入Realm对象,为何为空?
问题排查与解决方案
我之前在Realm 3.x版本里也碰到过原语数组映射为空的情况,结合你的代码和场景,大概率是这几个原因,你可以逐一排查:
- 缺少ObjectMapper的Realm扩展依赖:你用到的
mapping(map: Map)是ObjectMapper框架的方法,而Realm的List类型要和ObjectMapper配合解析数组,必须依赖ObjectMapper+Realm这个扩展库。如果没添加这个依赖,ObjectMapper无法正确识别Realm的List类型,自然会导致解析后属性为空。 - 类的继承与协议实现不完整:确认你的
My Object类是否正确继承了Realm.Object,同时遵循了Mappable协议?而且一定要实现init?(map: Map)这个必要的初始化方法,很多人会漏掉这一步,直接导致映射逻辑根本没执行。示例代码如下:class MyObject: Object, Mappable { var imageURLs = List<String>() // 必须实现这个Mappable要求的初始化方法 required init?(map: Map) { super.init() } // Realm Object要求的默认初始化方法 override init() { super.init() } func mapping(map: Map) { imageURLs <- map["image_urls"] } } - 对象初始化方式有误:如果是手动创建对象后调用
map(JSON:)方法,要确保先通过MyObject()或MyObject(map:)完成初始化,再执行映射操作;不要直接用Realm的create方法创建对象后再做映射,这种情况可能会因为Realm对象的状态限制导致映射失效。 - 版本兼容性问题:Realm 3.3本身支持原语数组,但如果你的ObjectMapper版本和Realm版本不匹配,也可能出现兼容问题。建议检查两者版本是否适配,比如ObjectMapper版本过低的话,对Realm 3.x的
List类型支持可能不完善。
你可以先从检查ObjectMapper+Realm依赖和类的实现开始,应该就能解决这个问题了。
内容的提问来源于stack exchange,提问作者kunass2
相关产品推荐
相关产品推荐

