使用 UserDefaults 保存数组

Posted

技术标签:

【中文标题】使用 UserDefaults 保存数组【英文标题】:Saving array with UserDefaults 【发布时间】:2017-01-03 10:31:33 【问题描述】:

这是在 Swift 3 中使用 UserDefaults 在 tableView 中保存字典数组的正确方法吗? var arrNotes = [字符串:字符串]

func saveNotesArray () 
    UserDefaults.standard.set(arrNotes, forKey: "notes")
    UserDefaults.standard.synchronize()

【问题讨论】:

是的,它是正确的 但是 "forKey: "notes"" 是什么意思呢? @Jovan Milosavljevic 使用 key 将对象存储在 userdefault 中是一种快捷的语法。 [String:String] 不是一个数组,顺便说一句...而且你不需要.synchronize() 使用 notes 键你会得到对象: UserDefaults.standard.object(forKey: "notes") as? [字符串:字符串] 【参考方案1】:

使用此功能获取您的笔记:

 func saveNotesArray () 
       var notes = UserDefaults.standard.object(forKey: "notes") as?   [String:String]

你是否以同样的方式获取对象?

【讨论】:

【参考方案2】:

"[String: String]" 表示键和值都是字符串的字典。

"[[String: String]]" 表示包含字典的数组,其中键和值都是字符串。

创建一个字符串字典和一个数组来保存它们

let dictionary: [String: String] = ["keyOne" : "valueOne", "keyTwo": "valueTwo"]
let arrayWithDictionaryOfStrings: [[String: String]] = [dictionary]

将数组添加到 userDefaults

let userDefaults = UserDefaults.standard
userDefaults.set(arrayWithDictionaryOfStrings, forKey: "arrayWithDictionaryOfStrings")

userDefaults.synchronize();

从 userdefaults 中获取字典数组

if let fetchedArrayWithDictionaryOfStrings: [[String: String]] = (userDefaults.object(forKey: "arrayWithDictionaryOfStrings") as? [[String: String]]) 
    // handle fetchedArrayWithDictionaryOfStrings

【讨论】:

你不需要.synchronize() @Eric Aya,这取决于。 “由于此方法会定期自动调用,因此仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或您想要更新用户默认值时才使用此方法虽然你没有做任何改变。” developer.apple.com/reference/foundation/userdefaults/… 是的,我知道这份文件,所以我告诉你你不需要.synchronize()...!它是“定期自动调用”,对于 99.99% 的情况来说已经足够了,就像这里一样。【参考方案3】:

你应该这样做 保存

let placesData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
UserDefaults.standard.set(arrNotes, forKey: "notes")

从 NSUserDefault 检索数组。

let placesData = UserDefaults.standard.object(forKey: "notes") as? NSData

if let placesData = placesData 
    let arrNotes = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? NSMutableArray
    print(arrNotes)

【讨论】:

【参考方案4】:

在 Swift-3 中,使用 UserDefaults 保存数组的方式如下:

let userDefaults = UserDefaults.standard

userDefaults.set(arrayOfname, forKey:"Keyname")
userDefaults.synchronize()

【讨论】:

我可以把我的项目放在这里吗,因为我找不到错误?

以上是关于使用 UserDefaults 保存数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UserDefaults 中重置“AppleLanguages”键的值

如何使用 userDefaults 保存打印数组(swift 3)

尝试将数组保存到 UserDefaults

存储/保存 @State 数组 (UserDefaults)

Swift:无法将数组保存到 UserDefaults

在 UserDefaults 中保存不同对象类型的数组