通过主键查询单个Realm对象报错:无效对象ID需为24位十六进制数字
问题根因
你定义的Chapter模型主键chapterID为Int类型,但查询时你将入参chapterID通过"\(chapterID)"转为了字符串类型传入查询方法,主键值类型和模型定义的主键类型不匹配触发了报错。
Realm在校验非字符串类型主键的入参时,如果你错误传入字符串值,会默认将其识别为ObjectId类型进行校验,因此抛出了「必须为24位十六进制字符」的错误提示。
修复方法
查询时直接传入原始Int类型的chapterID即可,不要做字符串转换:
// 修改前错误写法 // let chapter = try Realm().object(ofType: Chapter.self, forPrimaryKey: "\(chapterID)") // 修改后正确写法 let chapter = try Realm().object(ofType: Chapter.self, forPrimaryKey: chapterID)
其他排查注意点
- 确保你当前初始化的
Realm实例,和之前写入Chapter数据时使用的Realm实例配置一致,默认配置下无需额外调整,如果你自定义了Realm配置要统一使用相同配置初始化 - 确认你查询的
chapterID对应的Chapter对象已经成功写入当前Realm库中,若数据不存在查询会返回nil,不会抛出异常
内容的提问来源于stack exchange,提问作者user2814778
相关产品推荐
相关产品推荐

