如何在Realm,Swift中解决检索到的对象的键?

时间:2015-11-14 18:24:19

标签: swift realm

我使用Realm为我的iOS移动应用创建了数据库,用Swift编写。 我正试图找到在DB

中查找匹配用户名和密码的方法

这就是我目前所做的,尝试过滤并获取具有匹配用户名的对象 我试图从检索到的对象

解决称为密码的属性/密钥
@IBAction func SignInCheck(sender: AnyObject) {

    let realm = try! Realm()
    var currentlogin = realm.objects(UserRecords).filter("name = LogUsernameTextField.text") 
//this line causes SIGABRT to be thrown

    if currentlogin.password == LogPasswordTextField.text { //This is the incorrectly addressed line
        ....
    }
}

问题可能是我不理解对象如何以正确的方式工作,也不知道正确的语法来解决我想要的问题。

我怀疑它是以结果的形式,但我仍然无法找到解决所需信息的方法。

以下是您的信息的表格结构

class UserRecords: Object {
  dynamic var username: String = ""
  dynamic var password: String = ""
  dynamic var latitude: Float = 0
  dynamic var longtitude: Float = 0
}

我愿意提供更好的解决方案以及在表格中查找/匹配密码的方法,如果有的话。

提前致谢

1 个答案:

答案 0 :(得分:1)

您在name字符串中使用名为filter的属性,但在UserRecords类中,该属性称为username。您还必须以不同方式创建过滤器字符串:

var currentlogin = realm.objects(UserRecords).filter("username = '\(LogUsernameTextField.text!)'")

另请注意,filter方法返回与过滤器匹配的UserRecord个对象的列表,而不是单个对象。因此调用if currentlogin.password == ...会导致错误。

该列表只有1个项目(因为用户名是唯一的),但它仍然是一个列表。因此,要访问UserRecord对象,您可以调用first

var currentlogin = realm.objects(UserRecords).filter("name = LogUsernameTextField.text!").first 

text的{​​{1}}属性也返回一个Optional,所以你必须打开它。