Swift3 使用Swift中的Realm在初始和后续加载简单游戏级别数据时丢失链接列表

Swift3 使用Swift中的Realm在初始和后续加载简单游戏级别数据时丢失链接列表,swift3,realm,xcode8,Swift3,Realm,Xcode8,我有一个小的iOS游戏,目前大约有20个关卡。我使用realm存储级别元数据,然后将分数列表链接到每个级别 前 在游戏后期,我通过以下方式将分数添加到一个关卡: let realm = try! Realm() try! realm.write { let score = Score(value: ["pointsEarned":score.pointsEarned, "bonusEarned":score.bonusEarned]) level.scores.append(sc

我有一个小的iOS游戏,目前大约有20个关卡。我使用realm存储级别元数据,然后将分数列表链接到每个级别

在游戏后期,我通过以下方式将分数添加到一个关卡:

let realm = try! Realm()
try! realm.write {
    let score = Score(value: ["pointsEarned":score.pointsEarned, "bonusEarned":score.bonusEarned])
    level.scores.append(score)
    realm.add(level, update: true)
}
我知道这个结构很幼稚,需要修复。我现在面临的主要问题是,当游戏每次加载并且
did完成启动时,会调用options
。它再次加载级别(例如级别3)并进行更新,但分数不会保持不变。它们仍然在数据库中,但现在它们只是挂在那里的kine b/c领域链接消失了

我的问题是:

  • 加载初始级别集(以及将来添加级别)是否有更好的最佳实践
  • 如何改进结构以保持分数链接,同时允许我更新级别元数据

  • 使用Swift 3.0.2/Xcode 8/使用链接二进制文件的领域的最新版本将
    level3
    添加到领域时,其每个属性的值将替换现有对象的值。这包括恰好处于默认值的属性,因为无法将其与显式设置的属性区分开来

    如果您改为执行realm.create(Level.self,[“id”:“3”,“maxTimeAllowed”:10.0,“bonusTime”:5.0])则只使用字典中实际存在的值


    realm.add(level,update:true)
    在您显示的第二个写入事务中,假设
    level
    是从realm检索的对象,则该行将替换该级别的现有分数列表。

    谢谢!这起作用了,让我走上了更多阅读的道路。非常感谢。
    try! realm.write {
        realm.add([level3], update: true)
    }
    
    let realm = try! Realm()
    try! realm.write {
        let score = Score(value: ["pointsEarned":score.pointsEarned, "bonusEarned":score.bonusEarned])
        level.scores.append(score)
        realm.add(level, update: true)
    }