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 中的数组数组?


基础教程推荐
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01