Search code examples
iosarraysswiftuserdefaults

Save array of items in UserDefaults - iOS 12


I want to save an array of TreeWithPos objects in UserDefaults. Every solution I've found (like Data object) didn't work in iOS 12. What can I do? I've tried this:

try? defaults.set(NSKeyedArchiver.archivedData(withRootObject: treesArr, requiringSecureCoding: false), forKey: "trees")

Solution

  • You can try using Codable protocol with JSONEncoder() & JSONDecoder()

    struct SaveItem : Codable {
    
        var name:String
    }
    

    //

    let arr = [SaveItem(name: "name1"),SaveItem(name: "name2")]
    
    do {
    
        // write
    
        var data  = try JSONEncoder().encode(arr)
    
        UserDefaults.standard.set(data, forKey: "Key")
    
        // read
    
        let content = UserDefaults.standard.data(forKey: "Key")
    
        let saved = try JSONDecoder().decode([SaveItem].self, from: content!)
    
        print(saved)
    
     }
     catch {
    
          print(error)
      }