2017-07-12 12 views
1

Myオブジェクトは、新しいSwift 4 Codeableプロトコルに準拠しています。どのようにこれらのオブジェクトの配列をUserDefaultsに保存するのですか?オブジェクトを含む配列をUserDefaultsに保存する方法

struct MyObject: Codeable { 
    var name: String 
    var something: [String] 
} 

myObjectsArray = [MyObject]() // filled with objects 
UserDefaults.standard.set(myObjectsArray, forKey: "user_filters") 

エラー

キャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了:非財産 リストオブジェクトを挿入する「試み

答えて

2

やれやれ、私はそれが働いて得ました:

ここにはSwift 4 Sy CodeableオブジェクトのArrayを保存するntax:

私のソリューションは、JSONオブジェクトとしてそれをエンコードし、それを保存することです:

static var getAllObjects: [MyObject] { 
     let defaultObject = MyObject(name: "My Object Name") 
     if let objects = UserDefaults.standard.value(forKey: "user_objects") as? Data { 
     let decoder = JSONDecoder() 
     if let objectsDecoded = try? decoder.decode(Array.self, from: objects) as [MyObject] { 
      return objectsDecoded 
     } else { 
      return [defaultObject] 
     } 
     } else { 
     return [defaultObject] 
     } 
    } 

static func saveAllObjects(allObjects: [MyObject]) { 
     let encoder = JSONEncoder() 
     if let encoded = try? encoder.encode(allObjects){ 
     UserDefaults.standard.set(encoded, forKey: "user_objects") 
     } 
} 
+0

これは素晴らしいソリューションである - 私は、プロパティリストのエンコーダを使用していました。正しい自分をマークしてください! –

関連する問題