我是 Realm 的新手,我需要帮助。首先,我的 Realm 对象如下所示:
class RegistrationInf: Object {
dynamic var RValCode = ""
dynamic var RIsConfirmed = false
}
我有一个 PHP 脚本,它返回包含验证码的 JSON 数据,我使用以下函数将其插入到 Realm 数据库中:
func RegisterToDatabase(Valcode:String, IsConfirmed:Bool = false){
let loRegistrationInf = RegistrationInf()
let realm = try! Realm()
if IsConfirmed {
let loReg = realm.objects(RegistrationInf.self).filter("RValCode == \(Valcode)").first
try! realm.write {
loReg?.RIsConfirmed = IsConfirmed
}
self.loIsConfirmed = IsConfirmed
}
else {
loRegistrationInf.RValCode = Valcode
loRegistrationInf.RIsConfirmed = IsConfirmed
try! realm.write {
realm.add(loRegistrationInf)
}
}
}
然后当用户收到包含代码的短信时,他们输入并确认,再次调用上面的函数,只是这次 第二个参数的值为真。
当代码走到下面一行时:
let loReg = realm.objects(RegistrationInf.self).filter("RValCode == \(Valcode)").first
我得到一个异常告诉我:
Terminating app due to uncaught exception 'Invalid value', reason: 'Property 'RValCode' is not a link in object of type 'RegistrationInf''
我在这里错过了什么?
最佳答案
你的过滤器应该是 .filter("RValCode == %@", Valcode)
。由于字符串未被引用(使用 NSPredicate 格式语法时不需要),因此在此处使用 Swift 的字符串插值会产生无效查询。
关于Swift:使用 Realm 过滤记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42772523/