gpt4 book ai didi

ios - Realm 在更新时为嵌套对象创建多个条目

转载 作者:行者123 更新时间:2023-11-29 11:49:08 36 4
gpt4 key购买 nike

我在理解更新对象在 Realm 中的工作方式时遇到了问题。如果您能帮助我了解更新嵌套对象 的工作原理以及为什么它无法按我预期的方式工作,我将不胜感激。

我最近才开始使用 Realm,这就是我想使用它的目的:我的服务器上存储了一组键值对,用作我的 iOS 应用程序中使用的字符串的本地化值。在应用程序启动时,我时不时地想更新我的字符串,所以我从服务器中提取它们并将它们本地存储在我的 iOS 设备上的 Realm 中。我只想在我的设备上拥有这些字符串的一个实例

这里是类:

import RealmSwift

public class LocalizedStrings: Object {
dynamic var id = 1
dynamic var version: String = ""
let assets = List<LocalizedString>()
override public static func primaryKey() -> String? {
return "id"
}
}

public class LocalizedString: Object {
dynamic var key: String = ""
dynamic var value: String = ""
}

这是我更新 LocalizedStrings 对象的方法:

realm.add(localizedStrings, update: true)

这是我访问字符串的方式:

func getLocalizedString(forKey key: String) -> String {
var result = key
try! realm.write {
let queryResult = realm.objects(LocalizedString.self).filter("key == %@", key)
// print(queryResult)
if queryResult.count == 1 {
result = queryResult[0].value(forKey: "value") as! String
}
}
return result
}

现在,我希望每当我更新 LocalizedStrings 时,localizedStrings.assets 列表都会更新为新值。但是相反, Assets 没有更新,列表引用得到更新,我最终得到了同一个字符串的多个实例,这不是我期望的更新函数。当我尝试访问特定的 LocalizedString 时,发现有多个实例:

(...)
[19] LocalizedString {
key = update;
value = Update;
},
[20] LocalizedString {
key = update;
value = Update;
}

也许我遗漏了一些明显的东西,如果有人能给我指出正确的方向,我将不胜感激,这样我就能够实现我正在寻找的行为(这将实际更新嵌套对象,而不是拥有不必要的对象副本)。

谢谢!

最佳答案

好的,所以这 answer帮助我弄清楚我的设置有什么问题。我在 LocalizedString 类中缺少 primaryKey。

根据上面关于 realm.add(object, update: true) 工作原理的回答:

Documentation :

  • parameter object: The object to be added to this Realm.
  • parameter update: If true, the Realm will try to find an existing copy of the object (with the same primary key), and update it. Otherwise, the object will be added.

同样的事情也会发生在嵌套对象上。除非它们具有主键,否则无法更新它们。

关于ios - Realm 在更新时为嵌套对象创建多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027751/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com