将 swifty json 数组保存为用户默认值
saving swifty json array to user defaults
我有一个 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()
但是,我得到一个错误
"[User Defaults] Attempt to set a non-property-list object".
请协助我是 swift 的新手。我也检查了其他类似的问题,但似乎不起作用。
字典的数组不能直接保存到 NSUserDefault
,需要将数组的对象转成 NSData
查看更多帮助:
Attempt to set a non-property-list object as an NSUserDefaults
您无法将 SwiftyJSON 的自定义类型 JSON
保存到 UserDefaults
但您可以保存 raw 数组,因为反序列化 JSON 集合类型符合 属性 列表。
只需在 JSON
对象上调用 arrayObject
:
GlobalVar.defaults.set(json.arrayObject, forKey: "questionArray")
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)
Swift 4.0 | Xcode 9.1 | SwiftyJSON
我们可以直接保存字典数组,没问题。
只是,问题是,如何找回它?
它勉强向下转换为字典数组(比如 [[String : Any]])。为此,我们需要 SwiftyJSON pods 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"])
}
我有一个 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()
但是,我得到一个错误
"[User Defaults] Attempt to set a non-property-list object".
请协助我是 swift 的新手。我也检查了其他类似的问题,但似乎不起作用。
字典的数组不能直接保存到 NSUserDefault
,需要将数组的对象转成 NSData
查看更多帮助:
Attempt to set a non-property-list object as an NSUserDefaults
您无法将 SwiftyJSON 的自定义类型 JSON
保存到 UserDefaults
但您可以保存 raw 数组,因为反序列化 JSON 集合类型符合 属性 列表。
只需在 JSON
对象上调用 arrayObject
:
GlobalVar.defaults.set(json.arrayObject, forKey: "questionArray")
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)
Swift 4.0 | Xcode 9.1 | SwiftyJSON
我们可以直接保存字典数组,没问题。 只是,问题是,如何找回它?
它勉强向下转换为字典数组(比如 [[String : Any]])。为此,我们需要 SwiftyJSON pods 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"])
}