how to save and read array of array in NSUserdefaults in swift?(如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?)
问题描述
我需要创建一个数组来添加这种格式的对象,例如 Swift 中的字典:["key1": "value1", "key2": "value2"]
I need create an array to add objects with this format like a dictionary in Swift : ["key1": "value1", "key2": "value2"]
当我尝试使用 NSUserDefaults 保存它时,一切都是正确的,但是当使用密钥读取 NSUserDefaults 时,它会崩溃.我的 var obj 需要什么类型的数据?
When I try to save it with NSUserDefaults all is correct, but when read NSUserDefaults with the key this crashes. What type of data does my var obj need?
let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!
var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])
//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()
//read
var obj: [AnyObject!] = []
if(obj != nil){
print("size: ")
print(obj.count) //vary long value confused..
element = obj[0] //crash
print(element.objectForKey("key1"))
}
推荐答案
问题是array of array",但我想大多数人可能只是想知道如何将数组保存到 UserDefaults.对于这些人,我将添加一些常见的示例.
The question reads "array of array" but I think most people probably come here just wanting to know how to save an array to UserDefaults. For those people I will add a few common examples.
保存数组
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
检索数组
let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
整数数组
保存数组
let array = [15, 33, 36, 723, 77, 4]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedIntArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray") as? [Int] ?? [Int]()
布尔数组
保存数组
let array = [true, true, false, true, false]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedBoolArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray") as? [Bool] ?? [Bool]()
日期数组
保存数组
let array = [Date(), Date(), Date(), Date()]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedDateArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray") as? [Date] ?? [Date]()
对象数组
自定义对象(以及随之而来的对象数组)需要更多的工作才能保存到 UserDefaults.请参阅以下链接了解如何操作.
Object array
Custom objects (and consequently arrays of objects) take a little more work to save to UserDefaults. See the following links for how to do it.
- 将自定义对象保存到 NSUserDefaults
- 将颜色保存到 UserDefaults 的文档
- 尝试设置非属性-list 对象作为 NSUserDefaults
- nil 合并运算符 (
??) 允许您返回保存的数组或空数组而不会崩溃.这意味着如果对象返回 nil,则将使用??运算符后面的值. - 如您所见,
Int、Bool和Date的基本设置相同.我还用Double对其进行了测试.据我所知,您可以保存在属性列表中的任何内容都可以这样工作.
- The nil coalescing operator (
??) allows you to return the saved array or an empty array without crashing. It means that if the object returns nil, then the value following the??operator will be used instead. - As you can see, the basic setup was the same for
Int,Bool, andDate. I also tested it withDouble. As far as I know, anything that you can save in a property list will work like this.
这篇关于如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
