ios - 为什么 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()
}
如果您想要任何相关代码,请告诉我,我很欣赏另一种存储该响应的方法或方式。
或者让我知道如何将该响应存储在用户默认值中。谢谢你
解决方案
领域结果对象没有保证的顺序,因此无论是保存还是检索,您都不应该期望结果是某种顺序。
另一方面,列表对象确实保证了它们的顺序。
如果您想对 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)
这样做的另一个好处是,当添加新数据时,它将以正确的顺序反映在结果中。
推荐阅读
- reactjs - 如何减少反应表/反应复选框表中的特定行高
- python - NumPy 中的二维子序列数组
- web - 当您在移动浏览器上运行 ng serve --host 0.0.0.0 时,Angular 7 订阅方法(可观察到的问题)不起作用
- c - 在这样的函数调用中分配的内存会发生什么?
- javascript - HTML 中 onInput 中的函数调用
- go - 使用golang或go提交表单后如何正确获取json中的消息
- drupal - 如何在 drupal 8 中使用节点--[内容类型]--teaser.html.twig?
- python - Django REST 嵌套对象序列化器
- javascript - 无法在 JavaScript 中访问关联数组的值
- python - 如何在python中创建非常大的矩阵