2016-03-03 17 views
15

trong dự án iOS của tôi, tôi cần lưu toàn bộ JSON làm dữ liệu người dùng và sau đó tải lại nó khi khởi chạy ứng dụng tiếp theo. Đập nó thành nhiều giá trị và sau đó tạo lại JSON không phải là một tùy chọn, tôi chỉ cần một số cách có thể tuần tự hóa để lưu toàn bộ JSON thô. Tôi đã cố gắng chuyển đổi nó thành String bằng cách thực hiện json.rawString() và tạo lại bằng cách chuyển số thu được string đến JSON(string), nhưng nó không hoạt động.Làm cách nào để lưu và sau đó tải JSON trong NSUserDefaults bằng SwiftyJSON?

Tôi vừa ngạc nhiên bởi những khó khăn trong việc thực hiện một điều đơn giản như vậy và do thiếu thông tin về một điều như trực tuyến này, vì vậy tôi không thể chờ đợi để khám phá làm thế nào để làm điều đó :)

Ví dụ:

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

Bạn có chắc chắn bạn muốn lưu nó vào NSUserDefaults? Nó có thể là tốt hơn để de-serialize JSON của bạn vào một mảng hoặc một từ điển và sau đó lưu nó vào một plist trong thư mục tài liệu của bạn và tải rằng trên khởi động ứng dụng của bạn. – Abizern

+0

Vấn đề là dữ liệu có thể thay đổi, và dù sao nó cũng là một JSON rất nhỏ, vì vậy đối với tôi thì nó ổn. –

+0

SaveJSON có hoạt động cho bạn không? –

Trả lời

19

Cảm ơn bạn đã trả lời của bạn, nhưng họ đã không giải quyết vấn đề của tôi. Cuối cùng tôi đã tìm ra giải pháp, thực sự đơn giản trong thực tế:

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

Thực sự đơn giản nhưng không được ghi nhận rõ.

2

Tôi đã sử dụng mã sau và nó hoạt động như một sự quyến rũ!

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

Trước tiên hãy thử xem bạn có thể lưu chuỗi mã hóa cứng vào số NSUserDefaults trước không.

Cũng cố gắng gọi một cuộc gọi [defaults synchronize]; khi bạn muốn lưu dữ liệu. Mặc dù đó là yêu cầu KHÔNG, có thể cần thiết trong điều kiện khắc nghiệt như ứng dụng sắp chấm dứt.

1

Dưới đây là một ví dụ nhanh chóng mà làm việc

import SwiftyJSON 
class Users{ 

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

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

    } 
} 
-1

nhanh chóng 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!) 
} 
Các vấn đề liên quan