Search code examples
arraysswiftsaveuserdefaults

Append Array To UserDefaults Without Removing Original UserDefault Info


So I am making an array of appended objects. My problem is that I want to add the objects without removing the original objects. Once I append the objects, I see them. But when I add new objects, the old objects are gone, and replaced by the older objects. How can I keep both through NSUserDefaults?

So far, I have done lots of research, and haven't found anything.

case 0:
            self.array.append("Instagram")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 1:
            self.array.append("Snapchat")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 2:
            self.array.append("VSCO")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 3:
            self.array.append("Pinterest")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 4:
            self.array.append("Tiktok")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 5:
            self.array.append("Twitter")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 6:
            self.array.append("Facebook")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 7:
            self.array.append("Google")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 8:
            self.array.append("Flickr")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 9:
            self.array.append("iFunny")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 10:
            self.array.append("Tumblr")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 11:
            self.array.append("Viber")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 12:
            self.array.append("Vine")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        case 13:
            self.array.append("WhatsApp")
            UserDefaults.standard.set(self.array, forKey: "addedAccounts")
        default:
            print("Error")
            print(self.array)

No Error Messages


Solution

  • Make sure you load self.array with the current values from UserDefaults. Then you can update the array and then update UserDefaults with the updated array.

    During some appropriate initialization:

    self.array = UserDefaults.standard.array(forKey: "addedAccounts") as? [String] ?? []
    

    Then your switch:

    var newVal: String?
    switch whatever {
    case 0: newVal = "Instagram"
    case 1: newVal = "Snapchat"
    // and the rest
    }
    if let newVal = newVal {
        self.array.append(newVal)
        UserDefaults.standard.set(self.array, forKey: "addedAccounts")
    }
    

    BTW - It would be a lot simpler to replace that switch with an array of accounts names.