swift - 如何在 NSUserdefaults 中快速保存和读取数组数组?

标签 swift nsuserdefaults xcode6

我需要创建一个数组来添加具有这种格式的对象,就像 Swift 中的字典一样:["key1": "value1", "key2": "value2"]

当我尝试使用 NSUserDefaults 保存它时,一切都是正确的,但是当使用 key 读取 NSUserDefaults 时,它会崩溃。我的 var obj 需要什么类型的数据?

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。对于这些人,我将添加一些常见示例。

字符串数组

保存数组

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]()

bool 数组

保存数组

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。请参阅以下链接了解如何操作。

注意事项

  • nil 合并运算符 (??) 允许您在不崩溃的情况下返回保存的数组或空数组。这意味着如果对象返回 nil,则将使用 ?? 运算符后面的值。
  • 如您所见,IntBoolDate 的基本设置相同。我还使用 Double 对其进行了测试。据我所知,您可以保存在属性列表中的任何内容都可以像这样工作。

关于swift - 如何在 NSUserdefaults 中快速保存和读取数组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179668/

相关文章:

ios - 如何从字符串中提取表情符号?

swift - FBSDKGraphRequestHandler Swift 3错误

swift - 在 Swift 4 中取消存档 NSMutableArray

ios - 在 NSUserDefaults 中存储 NSArray 时应用程序崩溃

Ios Swift 在非线性路径中为 View 设置动画

swift - Rx swift : chaining several actions

objective-c - XC测试 : Value not retrieved in NSUserdefaults in UI test Class

ios - 在 Xcode 项目中添加 Pods 或 CocoaPods 的最快方法

swift - 找不到接受提供的参数的 'init' 的重载

ios - 更新到 Xcode 7.1(从 6.4)导致 UIIMageView 动画损坏