按主键排序的Realm Results数组未实际排序

时间:2019-06-13 17:33:46

标签: ios realm

我有一个包含对象的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

为什么它们不按顺序出现?

1 个答案:

答案 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
}