(Swift) 将数组存储和检索到 NSUserDefaults
(Swift) Storing and retrieving Array to NSUserDefaults
我正在尝试将数组存储到 NSUserDefaults
并在需要时检索数组以填充 UITableView
。
目前我正在使用:
//store data
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")
NSUserDefaults.standardUserDefaults().synchronize()
//retrieve data
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")
myArray = [tabledata!]
tableView.reloadData()
但我明白了
fatal error: unexpectedly found nil
while unwrapping an Optional
value
尝试加载数据时。我不确定问题出在存储还是检索中。有人经历过这个吗?
你在数组中存储了什么?
如果是对象就不行,如果只是字符串或者数字应该没问题。
下一步你应该打开异常断点,也许 println() 一切都可以,这样你就可以查明问题的确切位置。
在黑暗中我建议可能 (identity.text!) 结果为零
你也应该改成这样
if let tabledata: NSArray = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA"){
myArray = [tabledata!]
tableView.reloadData()
}
这将使代码甚至不会尝试 运行 除非有它可以使用的值
从你的代码中我看到你正在存储一些数组
// Your code
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")
并检索字符串
//Your code
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")
可能存在类型不匹配,您存储一种类型并检索另一种类型。
检索时使用 arrayForKey()
或 objectForKey()
请参阅下面的代码。
let tabledata = NSUserDefaults.standardUserDefaults().arrayForKey("\(identity.text!)listA")
或
let tabledata = NSUserDefaults.standardUserDefaults().objectForKey("\(identity.text!)listA")
如果它是一个数组,我会选择第一个。
以下是您可以在 NSKeyArchive
的帮助下存储和检索对象数组的方法。
将数组存储到 NSUserDefault。
let placesData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
UserDefaults.standard.set(placesData, forKey: "places")
从 NSUserDefault 检索数组。
let placesData = UserDefaults.standard.object(forKey: "places") as? NSData
if let placesData = placesData {
let placesArray = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? [Place]
print(placesArray)
}
希望对您有所帮助。
将字符串数组保存和检索到 UserDefaults
保存数组
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.object(forKey: "SavedStringArray") as? [String] ?? [String]()
查看更多
这已在 swift 3 中更改。
请注意,这适用于设备但不适用于游乐场或模拟器
//store the array
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.setValue(array, forKey: "history")
defaults.synchronize()
//Retrieve the array
if((UserDefaults.standard.array(forKey: "history")) != nil){
let historyWords = (UserDefaults.standard.array(forKey: "history") as? [String])!
print(historyWords)
}
最新的 swift3 版本将数据数组存储到 userdefaults 并使用键获取该数据数组
let nameArray = ["Ramu","JAGAN","Steve","Swift"]
let namesArrayData = NSKeyedArchiver.archivedData(withRootObject: nameArray)
UserDefaults.standard.set(namesArrayData, forKey: "arrayData")
检索数据
let retriveArrayData= UserDefaults.standard.object(forKey: "arrayData") as? NSData
if let retriveArrayData= namesArrayData{
let retriveArray = NSKeyedUnarchiver.unarchiveObject(with: namesArraydata as Data) as? [nameArray]
print(retriveArray )
}
存储到用户默认值:
let arrayFruit = ["Apple","Banana","Orange","Grapes","Watermelon"]
//store in user default
UserDefaults.standard.set(arrayFruit, forKey: "arrayFruit")
正在从用户默认值中检索数组:
if let arr = UserDefaults.standard.array(forKey: "arrayFruit") as? [String]{
print(arr)
}
我正在尝试将数组存储到 NSUserDefaults
并在需要时检索数组以填充 UITableView
。
目前我正在使用:
//store data
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")
NSUserDefaults.standardUserDefaults().synchronize()
//retrieve data
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")
myArray = [tabledata!]
tableView.reloadData()
但我明白了
fatal error: unexpectedly found
nil
while unwrapping an Optional value
尝试加载数据时。我不确定问题出在存储还是检索中。有人经历过这个吗?
你在数组中存储了什么?
如果是对象就不行,如果只是字符串或者数字应该没问题。
下一步你应该打开异常断点,也许 println() 一切都可以,这样你就可以查明问题的确切位置。
在黑暗中我建议可能 (identity.text!) 结果为零
你也应该改成这样
if let tabledata: NSArray = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA"){
myArray = [tabledata!]
tableView.reloadData()
}
这将使代码甚至不会尝试 运行 除非有它可以使用的值
从你的代码中我看到你正在存储一些数组
// Your code
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")
并检索字符串
//Your code
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")
可能存在类型不匹配,您存储一种类型并检索另一种类型。
检索时使用 arrayForKey()
或 objectForKey()
请参阅下面的代码。
let tabledata = NSUserDefaults.standardUserDefaults().arrayForKey("\(identity.text!)listA")
或
let tabledata = NSUserDefaults.standardUserDefaults().objectForKey("\(identity.text!)listA")
如果它是一个数组,我会选择第一个。
以下是您可以在 NSKeyArchive
的帮助下存储和检索对象数组的方法。
将数组存储到 NSUserDefault。
let placesData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
UserDefaults.standard.set(placesData, forKey: "places")
从 NSUserDefault 检索数组。
let placesData = UserDefaults.standard.object(forKey: "places") as? NSData
if let placesData = placesData {
let placesArray = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? [Place]
print(placesArray)
}
希望对您有所帮助。
将字符串数组保存和检索到 UserDefaults
保存数组
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.object(forKey: "SavedStringArray") as? [String] ?? [String]()
查看更多
这已在 swift 3 中更改。 请注意,这适用于设备但不适用于游乐场或模拟器
//store the array
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.setValue(array, forKey: "history")
defaults.synchronize()
//Retrieve the array
if((UserDefaults.standard.array(forKey: "history")) != nil){
let historyWords = (UserDefaults.standard.array(forKey: "history") as? [String])!
print(historyWords)
}
最新的 swift3 版本将数据数组存储到 userdefaults 并使用键获取该数据数组
let nameArray = ["Ramu","JAGAN","Steve","Swift"]
let namesArrayData = NSKeyedArchiver.archivedData(withRootObject: nameArray)
UserDefaults.standard.set(namesArrayData, forKey: "arrayData")
检索数据
let retriveArrayData= UserDefaults.standard.object(forKey: "arrayData") as? NSData
if let retriveArrayData= namesArrayData{
let retriveArray = NSKeyedUnarchiver.unarchiveObject(with: namesArraydata as Data) as? [nameArray]
print(retriveArray )
}
存储到用户默认值:
let arrayFruit = ["Apple","Banana","Orange","Grapes","Watermelon"]
//store in user default
UserDefaults.standard.set(arrayFruit, forKey: "arrayFruit")
正在从用户默认值中检索数组:
if let arr = UserDefaults.standard.array(forKey: "arrayFruit") as? [String]{
print(arr)
}