在iOS 12中将一系列UICol存档并取消存档到NSUserDefaults吗?

时间:2019-01-08 00:26:12

标签: ios swift nsuserdefaults uicolor nskeyedarchiver



我还是Swift的新手,我正在尝试将UIColours数组存档和取消存档到NSUserDefaults。我知道在ios 12中我需要使用unarchivedObject(ofClass:from:)-但我不确定如何使用它。

我尝试遵循以下问题:Unarchive Array with NSKeyedUnarchiver unarchivedObject(ofClass:from:) 但我认为我做错了。

这是我正在尝试的代码:

let faveColoursArray = [colour1, colour2]

private func archiveColours() -> Data {

    do {
        let data = try NSKeyedArchiver.archivedData(withRootObject: faveColoursArray, requiringSecureCoding: false)

        return data
    } catch {
        fatalError("can't encode data.")
    }


}


   func loadColours() -> [UIColor]? {

      guard let unarchivedObject = UserDefaults.standard.data(forKey: "faveColours") else {
          return nil
      }

      do {
          guard let array = try NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: unarchivedObject) else {
            fatalError("Can't load colours.")
        }
        return array
      } catch {
          fatalError("Can't load colours.")
      }

  }

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用unarchiveTopLevelObjectWithData(_:)

func loadColours() -> [UIColor]? {
    guard let unarchivedObject = UserDefaults.standard.data(forKey: "faveColours") else {
      return nil
    }

    do {
      guard let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(unarchivedObject) as? [UIColor] else {
        fatalError("Can't load colours.")
      }
      return array
    } catch {
      fatalError("Can't load colours.")
    }

}