我在iOS中有一个文本框,用户可以在其中输入名称并检索具有该名称的用户。我使用下面的解析查询。实际上它工作正常,但它区分大小写。
例如,当用户的名字在解析表中为“Martin”,并且您在文本框中输入“Martin”时,它会找到它,但是当您输入“martin”时它找不到任何内容。有没有办法使用“containsString”不区分大小写?
var query = PFUser.query()
query!.whereKey("username", notEqualTo: PFUser.currentUser()!.username!)
query!.whereKey("profileName", containsString: self.userSearchField.text)
编辑:
我找到了另一个解决方案,我在我的数据库中创建了一个名为“searchUser”的新列,当一个人使用新用户名注册时,该列中存储了几个版本的用户名(例如,所有字母大写) ,所有字母小写,只有小写首字母)。并在该列中使用“containsString”。现在它有更高的可能性来找到该用户。如下所示:
var varSearch1 = profileTxt.text
var varSearch2 = profileTxt.text.lowercaseString
var varSearch3 = profileTxt.text.uppercaseString
var varSearch4 = profileTxt.text.capitalizedString
user["searchUser"] = "\(varSearch1) \(varSearch2) \(varSearch3) \(varSearch4)"
答案 0 :(得分:1)
正如 Hector Ramos (Parser)在this帖子中所说:
您需要查询用户并使用localizedCaseInsensitiveCompare:local。使用orderByAscending:正如您已经发现的那样,将按字母顺序排序结果。
因为不区分大小写的查询非常昂贵。如果您的用户很少,那么这是一个可行的解决方案,但正如一个人在讨论中指出的那样 - 加载20k用户并不是很好。
如果您可以使用规范字段,那肯定会让您更轻松。