2017-01-03 66 views
0

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

func saveNotesArray() { 
    UserDefaults.standard.set(arrNotes, forKey: "notes") 
    UserDefaults.standard.synchronize() 
} 
+0

是其正确的 – ashmi123

+0

但什么是 “forKey: ”笔记“,” 是什么意思? –

+0

@Jovan Milosavljevic它是快速的语法来存储对象在userdefault使用键。 –

回答

0

使用此功能,让您的笔记:

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

您是否获得对象一样吗?

+0

不,它不起作用 –

-1

在夫特-3,通过以下方式来保存阵列UserDefaults:

let userDefaults = UserDefaults.standard 

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

这正是OP已经在做的!你不需要'.synchronize()'... – Moritz

+0

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

1

“[字符串:字符串]”表示一个字典,其中键和的值是字符串。

“[[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 
} 
+0

你不需要'.synchronize()'。 – Moritz

+0

@Eric绫,这取决于。“因为此方法是定期自动调用的,所以只有当您不能等待自动同步(例如,如果您的应用程序即将退出)或者您想要将用户默认更新为磁盘上的内容时才使用此方法尽管你没有做任何改变。“ https://developer.apple.com/reference/foundation/userdefaults/1414005-synchronize – Peep

+0

是的,我知道这个文件,*这就是为什么我告诉你*你不需要'.synchronize()'... !它是“定期自动调用的”,对于99,99%的情况就足够了,就像这里。 – Moritz

0

您应该像这样做 对于Savi纳克

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) 

}