Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在1次内更新域中的整个类Swift无效_Swift_Realm - Fatal编程技术网

在1次内更新域中的整个类Swift无效

在1次内更新域中的整个类Swift无效,swift,realm,Swift,Realm,想象一下这个代码: class StoredVersions: Object{ @objc dynamic var minimumAppVersion = 0.0 @objc dynamic var sets = 0.0 } class LoadViewController: UIViewController { let realm = try! Realm() override func viewDidLoad() { super.viewDidLoad()

想象一下这个代码:

class StoredVersions: Object{
    @objc dynamic var minimumAppVersion = 0.0
    @objc dynamic var sets = 0.0
}
class LoadViewController: UIViewController { 
    let realm = try! Realm()
override func viewDidLoad() {
    super.viewDidLoad()
    let db = Firestore.firestore()
    var newestVersions = StoredVersions()
    if let resultsStoredVersion = self.realm.objects(StoredVersions.self).first{
        print("found stored versions: \(resultsStoredVersion)")
        self.storedVersions = resultsStoredVersion
    }else{
        try! self.realm.write {
            print("no stored versions")
            self.realm.add(self.storedVersions)
        }
    }

    db.collection("data").document("version").getDocument(completion: { (data, someError) in
            if let versions = data.flatMap({StoredVersions(value: $0.data()) }) {
               try! self.realm.write {
                    self.storedVersions = versions
                }
            }
        })
}
storedVersions已更新,但当我重新启动应用程序时,storedVersions将返回其初始状态。我确实看到了“找到存储版本”的打印

如果我一次只写一个变量,它就工作了。看起来是这样的:

   try! self.realm.write {
      self.storedVersions.sets = versions.sets
    }
如何更新整个类而不必一次输入一个变量?

执行此操作时:

if let versions = data.flatMap({StoredVersions(value: $0.data()) }) {
    try! self.realm.write {
        self.storedVersions = versions
    }
}
您正在创建一个新的非托管
StoredVersions
对象。您需要调用
realm.add(:)
将其添加到realm,否则该对象只存在于内存中


如果要更新现有的
StoredVersions
对象,而不是创建一个新对象,则应改为使用
Realm.add(uquo:update:)
,为update参数指定
true
。请注意,这要求您的类型声明一个主键属性,以便Realm知道要更新哪个现有对象。

您能再共享一点上下文吗?例如,具有
storedVersions
属性的类的类定义、您提供的输入(即
数据
),以及您期望的结果。嗨@bdash,我编辑了我的问题以添加更多上下文,如果您愿意,我可以添加更多上下文。我提供的输入和预期结果是“应该”打印(“版本”打印)。我的“storedVersions”应包含与“versions”相同的值。能否共享包含正在执行的代码的类声明?@bdash我现在添加了UIViewController代码。storedVersions会在应用程序重新启动时自动删除。谢谢,它可以正常工作。但我觉得很奇怪的是,更新1个变量的方式符合我的要求,但是当更新整个类时,需要更多的键和更新。当您修改
self.storedVersions
的属性时,您修改的是一个已经由Realm管理的对象的属性(毕竟您只是从Realm中检索到它). 这与创建新的非托管对象完全不同。哈!现在我终于明白了!谢谢你抽出时间。