我有一个包含对象的Realm数据库,主键是一个包含数字的字符串,即
@objc public class Caller : Object
{
@objc dynamic var number = ""
...
override public static func primaryKey() -> String? {
return "number"
}
如果我尝试检索按键排序的对象,则它们不是按顺序显示的。
let results = realm.objects(Caller.self).sorted(byKeyPath: "number")
如果数据库包含3个对象,其值分别为12037366517、12037600287、67725082。那么,如果我遍历结果并记录“数字”,则结果为:
12037366517
12037600287
67725082
为什么它们不按顺序出现?
答案 0 :(得分:1)
如果number
是字符串,则这是预期的行为。当按升序对字符串进行排序时,将按字典顺序对其进行排序。因此,字符“ 3”在“ 2”之后,而在“ 1”之后等等。您的结果正确排序,只是不符合您的预期。
您可以通过对实际数字值进行排序来解决此问题。最好的方法是将数字实际存储为整数而不是字符串。如果不可能,则必须手动进行排序,但是我认为这样做的效果会较差。
let results = realm.objects(Caller.self).sorted { (a, b) -> Bool in
if let aInt = Int(a), let bInt = Int(b) {
return aInt < bInt
}
return false
}