在不删除原始 UserDefault 信息的情况下将数组附加到 UserDefaults

Posted

技术标签:

【中文标题】在不删除原始 UserDefault 信息的情况下将数组附加到 UserDefaults【英文标题】:Append Array To UserDefaults Without Removing Original UserDefault Info 【发布时间】:2019-06-01 18:25:14 【问题描述】:

所以我正在制作一个附加对象数组。我的问题是我想添加对象而不删除原始对象。一旦我附加了对象,我就会看到它们。但是当我添加新对象时,旧对象消失了,取而代之的是旧对象。如何通过 NSUserDefaults 保留两者?

到目前为止,我做了很多研究,但没有发现任何东西。

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)

没有错误信息

【问题讨论】:

print(UserDefaults.standard.value(forKey: "addedAccounts")) 有什么作用? 【参考方案1】:

确保使用来自 UserDefaults 的当前值加载 self.array。然后你可以更新数组,然后用更新后的数组更新 UserDefaults。

在一些适当的初始化期间:

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

然后你的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")

顺便说一句 - 将 switch 替换为一组帐户名称会简单得多。

【讨论】:

以上是关于在不删除原始 UserDefault 信息的情况下将数组附加到 UserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

在不更改原始 RowState 的情况下对数据集中的数据表进行排序

如何在不重新压缩 JPEG 的情况下删除 EXIF 数据?

在不丢失原始创建日期的情况下解压缩多个文件[重复]

如何在不更改原始内容的情况下操作 NSDictionary 内容的副本

组合:如何在不完成原始发布者的情况下替换/捕获错误?

在不丢失原始数据的情况下重定向回上一页