2016-03-03 11 views
15

w moim projekcie na iOS Potrzebuję zapisać cały JSON jako dane użytkownika, a następnie załadować go ponownie przy następnym uruchomieniu aplikacji. Zgniecenie go na wiele wartości, a następnie odtworzenie JSON nie jest opcją, po prostu potrzebuję jakiegoś serializowalnego sposobu zapisywania całego surowego JSON. Próbowałem przekonwertować go na String wykonując json.rawString() i odtworzyć go, przekazując uzyskany string do JSON(string), ale to nie działa.Jak mogę zapisać i załadować JSON w NSUserDefaults przy pomocy SwiftyJSON?

Jestem zdumiony zarówno przez trudności dokonywania taka prosta sprawa i brakiem informacji o coś takiego online, więc nie mogę się doczekać, aby dowiedzieć się, jak zrobić to :)

Przykład:

public func saveJSON(j: JSON) { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setValue(j.rawString()!, forKey: "json") 
    // here I save my JSON as a string 
} 

public func loadJSON() -> JSON { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    return JSON(defaults.valueForKey("json") as! String)) 
    // here the returned value doesn't contain a valid JSON 
} 
+0

Czy na pewno chcesz zapisać go na NSUserDefaults? Lepiej może zdekresualizować JSON do tablicy lub słownika, a następnie zapisać go w pliku plist w katalogu dokumentów i załadować go podczas uruchamiania aplikacji. – Abizern

+0

Problem polega na tym, że dane mogą ulec zmianie, a mimo to jest to bardzo mały JSON, więc dla mnie jest OK. –

+0

Czy saveJSON działa dla Ciebie? –

Odpowiedz

19

Dziękuję za odpowiedzi, ale nie rozwiąże mój problem. W końcu znalazłem rozwiązanie, które było bardzo proste w faktach:

public func loadJSON() -> JSON { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    return JSON.parse(defaults.valueForKey("json") as! String)) 
    // JSON from string must be initialized using .parse() 
} 

Naprawdę proste, ale nie udokumentowane.

2

Użyłem następującego kodu i działa jak czar!

NSString *json = @"{\"person\":{\"first_name\":\"Jim\", \"last_name\":\"Bell\"}} "; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if([defaults objectForKey:@"json"]== nil){ 
    [defaults setObject:json forKey:@"json"]; 
    //[defaults synchronize]; 
} 
else{ 
    NSLog(@"JSON %@", [defaults objectForKey:@"json"]); 
} 

najpierw spróbować, aby zobaczyć, czy można zapisać ciężko zakodowany ciąg do pierwszego z NSUserDefaults.

Spróbuj także zadzwonić pod numer [defaults synchronize];, aby zapisać dane. Chociaż jest to wymagane, może być potrzebne w ekstremalnych warunkach, na przykład gdy aplikacja ma się wkrótce zakończyć.

1

Oto szybki przykład, który działa

import SwiftyJSON 
class Users{ 

    init(){ 
     let yourJSON = {"name":"Deeznuts"} 
     let response = JSON(yourJSON) 

     // Store your 
     let httpMessage = response["name"].stringValue 

    } 
} 
-1

Swift 3

func setObject(value:JSON ,key:String){ 
     let pref = UserDefaults.standard 
     pref.set(value.rawString(), forKey: key) 
     pref.synchronize() 
} 

func getObject(key:String) -> JSON{ 
    let pref = UserDefaults.standard 
    let string = pref.value(forKey: key) as! String 
    let dataFromString = string.data(using: String.Encoding.utf8, allowLossyConversion: false) 
    return JSON(data: dataFromString!) 
} 
Powiązane problemy