/ / спестяване на бързо json масив към потребителски настройки - swift, alamofire, swifty-json

спестяване на бърз 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 за отговор № 1

Не можете да запазите персонализирания тип SwiftyJSON JSON да се UserDefaults но можете да запазите суров масив, защото десериализиран JSON тип колекция е съвместим със списъка на свойствата.

Просто звънни arrayObject на JSON предмет:

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

1 за отговор № 2

Не можете да запазите масива от речник директно към NSUserDefault, Трябва да конвертирате обекта в масива NSData

Вижте още за помощ:

Опит за задаване на обект, който не е списък със свойства, като NSUserDefaults


1 за отговор № 3

Swift 3.0

Можете да запазите SwiftyJSON персонализирани типове данни по-долу.

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

И, За да изтеглите JSON данни от UserDefaults, можете да направите подобен начин.

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

let json = JSON(data)

0 за отговор № 4

Суифт 4.0 | Xcode 9.1 | SwiftyJSON

Можем да спасим редица речници директно, без проблем. Само, проблемът е как да го извлечем?

Тя едва се спуска към масив от речник (да речем [[String: Any]]). за това са необходими подскоци SwiftyJSON 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], за по-нататъшно:

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