首页 > 解决方案 > 为什么 Realm 以错误的顺序存储值?

问题描述

我有一个响应,我将该响应存储在领域数据库中,我得到了低于响应但它以错误的顺序保存。

它保存在如下领域中,

 “appData3”
 “appData8”
 “appData4”
 “appData1”
 “appData7”
 “appData1”
 “appData6”
 “appData5”

响应如下

{
"data": {
"APP_DATA_1": {
"vValue": “appData1”
},
"APP_DATA_2": {
"vValue":“appData2”
},
"APP_DATA_3": {
"vValue": “appData3”
},
"APP_DATA_4": {
"vValue":“appData4”
},
"APP_DATA_5": {
"vValue": “appData5”
},
"APP_DATA_6": {
"vValue": “appData6”
},
"APP_DATA_7": {
"vValue": “appData7”
},
"APP_DATA_8": {
"vValue": “appData8”
}
}
}

我使用下面的代码存储价值

DataManager.shared.store(from: data.data.appData1)
DataManager.shared.store(from: data.data.appData2)
DataManager.shared.store(from: data.data.appData3)
DataManager.shared.store(from: data.data.appData4)
DataManager.shared.store(from: data.data.appData5)
DataManager.shared.store(from: data.data.appData6)
DataManager.shared.store(from: data.data.appData7)
DataManager.shared.store(from: data.data.appData8)



 func store<T>(from object: T) where T: Object {
     
        realmMainDB.beginWrite()
        
        realmMainDB.add(object, update: .all)
        
        try! realmMainDB.commitWrite()
    }

如果您想要任何相关代码,请告诉我,我很欣赏另一种存储该响应的方法或方式。

或者让我知道如何将该响应存储在用户默认值中。谢谢你

标签: iosswiftrealm

解决方案


领域结果对象没有保证的顺序,因此无论是保存还是检索,您都不应该期望结果是某种顺序。

另一方面,列表对象确实保证了它们的顺序。

如果您想对 Results 对象进行排序,请包含一个确保排序的属性,并且在检索结果时始终排序(byKeyPath:该字段。

使用时间戳或日期字符串进行排序很流行,但这取决于用例。

日期字符串可以是 yyyymmdd 格式,因此请更新您的模型以包含该属性

{
   "data": {
      "APP_DATA_1": {
         "vValue": “appData1”
         "datestring": "20210625"
   },
      "APP_DATA_2": {
         "vValue":“appData2”
         "datestring": "20210525"
   },

读书的时候

let results = realm.objects(DataClass.self).sorted(byKeyPath: "datestring", ascending: true)

这样做的另一个好处是,当添加新数据时,它将以正确的顺序反映在结果中。


推荐阅读