2016-03-03 70 views
15

在我的iOS項目中我需要將整個JSON保存爲用戶數據,然後在下次應用程序啓動時重新加載它。 將它壓縮成許多值,然後重新創建JSON不是一個選項,我只需要一些可序列化的方式來保存整個原始JSON。 我試圖通過執行json.rawString()將其轉換爲String,並通過將獲得的string傳遞給JSON(string)來重新創建它,但它不起作用。如何使用SwiftyJSON保存並在NSUserDefaults中加載JSON?

我既通過使這樣簡單的事情的困難以及缺乏關於這樣的網上的事信息的驚訝,所以我不能等待去發現怎麼做:)

例子:

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

您確定要保存到NSUserDefaults的?將您的JSON反序列化爲數組或字典,然後將其保存到文檔目錄中的plist並在應用程序啓動時加載它可能會更好。 – Abizern

+0

問題是數據可能會改變,無論如何它是一個非常小的JSON,所以對我來說沒關係。 –

+0

SaveJSON適合你嗎? –

回答

19

謝謝你的答案,但他們並沒有解決我的問題迅速例子。我終於找到了解決方案,其實很簡單:

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

真的很簡單,但沒有很好的記錄。

2

我用下面的代碼,它的作品就像一個魅力!

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"]); 
} 

首先嚐試查看是否可以先將硬編碼字符串保存到NSUserDefaults

當您想保存數據時,也嘗試調用[defaults synchronize];調用。雖然這是不需要需要,它可能需要在極端條件下,如應用程序即將終止。

1

這裏有一個工作

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!) 
} 
相關問題