将swifty json数组保存到用户默认值

时间:2017-08-02 09:56:12

标签: swift alamofire swifty-json

我有一个json data,它提供以下信息:

let data = [
  {
    "QuestionTitle" : "Entomology is the science that studies",
    "Id" : 205,
    "Options" : [
      { "Option" : "Insects", "Id" : 810 },
      { "Option" : "The origin and history of technical and scientific terms", "Id" : 811 },
      { "Option" : "The formation of rocks", "Id" : 812 },
      { "Option" : "Behavior of human beings", "Id" : 809 }
    ]
  },
  {
    "QuestionTitle" : "A train running at the speed of 60 km\/hr crosses a pole in 9 seconds. What is the length of the train?",
    "Id" : 199,
    "Options" : [
      { "Option" : "120 metres", "Id" : 785 },
      { "Option" : "324 metres", "Id" : 787 },
      { "Option" : "180 metres", "Id" : 786 },
      { "Option" : "150 metres", "Id" : 788 }
    ]
  }
]

我正在使用swiftyjson。我想使用nsuserdefaults保存整个数组。

GlobalVar.defaults.set(json, forKey: "questionArray")
GlobalVar.defaults.synchronize()

然而,我收到错误

  

“[用户默认值]尝试设置非属性列表对象”。

请帮助我是新手。我也检查了其他类似的问题,但似乎不起作用。

4 个答案:

答案 0 :(得分:4)

您无法将SwiftyJSON的自定义类型JSON保存到UserDefaults,但您可以保存原始数组,因为反序列化的JSON集合类型符合属性列表。< / p>

只需在arrayObject对象上调用JSON

GlobalVar.defaults.set(json.arrayObject, forKey: "questionArray")

答案 1 :(得分:3)

Swift 3.0

您可以保存SwiftyJSON自定义类型数据,如下所示。

guard let rawData = try? json.rawData() else { return }
UserDefaults.standard.setValue(rawData, forKey: "Your_key")

而且,要从UserDefaults中检索JSON数据,您可以这样做。

guard let data = UserDefaults.standard.value(forKey: "Your_key") as? Data else { return }

let json = JSON(data) 

答案 2 :(得分:1)

您无法将字典数组直接保存到 NSUserDefault您需要将数组对象转换为 {{1} }

查看更多信息以获取帮助:

Attempt to set a non-property-list object as an NSUserDefaults

答案 3 :(得分:0)

Swift 4.0 | Xcode 9.1 | SwiftyJSON

我们可以直接保存字典数组,没问题。 唯一的问题是,如何检索它?

它几乎没有转向字典数组(比如[[String:Any]])。为此,我们需要SwiftyJSON pod import SwiftyJSON // Don't forget this

let arrayOfDictionary = [
                         { 
                           "VersionNumber" : "1.0.0.0", 
                                  "FormID" : "18"
                          },
                         {
                           "VersionNumber" : "1.0.0.3",
                                  "FormID" : "19"
                          }
                         ]

将其直接保存到UserDefaults,例如:

UserDefaults.standard.set(saveFormDetails, forKey: "FormDetails")

从UserDefaults中检索:

let savedFormDetailsData = JSON.init(rawValue:UserDefaults.standard.array(forKey: "FormDetails"))

现在,savedFormDetailsData是字典返回[ PropertyList Type ]的数组,我们还会这样做:

for form in 0..<arrayOfDictionary.count {
    print("FormID :", savedFormDetailsData?[form]["FormID"]) 
    print("VersionNumber :", savedFormDetailsData?[form]["VersionNumber"])
}