将它们存储在UserDefault中时如何处理模型迁移?

问题描述 投票:0回答:1

我有一个名为qazxsw poi的对象符合Swift 4中引入的qazxsw poi。

例如,这个对象曾经是

User

我们使用Codablestruct User: Codable { var firstName: String } PropertyListDecoder().decode(User.self, from: data)编码为PropertyListEncoder().encode(value)并将User解码为Data

现在我们更新了对象

Data

如果我们的应用程序从旧的应用程序更新,其中包含存储在User中的旧struct User: Codable { var firstName: String var isLoggedIn: Bool } 。应用程序在更新后要做的第一件事是获取此Data并尝试使用UserDefault解码为Data。但是,它给出了一个错误:

User

知道如何在这种情况下处理模型迁移吗?我知道对于Coredata来说有一些简单的方法可以解决这个问题,但我不知道如何在UserDefault中实现它。

ios swift nsuserdefaults
1个回答
0
投票

您可以实现解码初始化程序并为PropertyListDecoder().decode(User.self, from: data)设置默认值(如果没有):

po PropertyListDecoder().decode(User.self, from: data)
▿ DecodingError
  ▿ keyNotFound : 2 elements
    - .0 : CodingKeys(stringValue: "isLoggedIn", intValue: nil)
    ▿ .1 : Context
      - codingPath : 0 elements
      - debugDescription : "No value associated with key CodingKeys(stringValue: \"isLoggedIn\", intValue: nil) (\"isLoggedIn\")."
      - underlyingError : nil
© www.soinside.com 2019 - 2024. All rights reserved.