所以我已经尝试了几个小时来将一个数组存储到NSUserDefault并将它们打印到单元格,但数据没有保存为数组,它基本上只保存一个值。
var emailData = [String]()
var passwordData = [String]()
@IBAction func addPressed(sender: AnyObject) {
let defaults = NSUserDefaults.standardUserDefaults()
emailData.append(addEmail.text!)
passwordData.append(addPassword.text!)
var storedEmail = defaults.objectForKey("emailData") as? [String] ?? [String]()
var storedPasswords = defaults.objectForKey("passwordData") as? [String] ?? [String]()
// then update whats in the `NSUserDefault`
defaults.setObject(emailData, forKey: "emailData")
defaults.setObject(passwordData, forKey: "passwordData")
// call this after you update
defaults.synchronize() /*
NSUserDefaults.standardUserDefaults().setValue(addEmail.text, forKey: "email")
NSUserDefaults.standardUserDefaults().synchronize()
*/
}
所以基本上数据没有保存。
答案 0 :(得分:4)
您也可以通过这种方式存储数组
let userDefault = NSUserDefaults.standardUserDefaults()
let arr = ["abc","xyz","pqr"]
userDefault.setObject(arr, forKey: "arr")
userDefault.synchronize()
let data = userDefault.objectForKey("arr") as! [String]
答案 1 :(得分:3)
可以在NSUserDefaults中存储数组。但是在单独的阵列中分离电子邮件和密码是不合适的。您应该将它存储为一个对象,因为它们是相关的。
在你的情况下,一个Dictionary对象数组更好,也可以存储在NSUserDefaults中,你可以将它作为一个Dictionary数组检索。
以下是样本:
let userDefault = NSUserDefaults.standardUserDefaults()
var storedCredentials = userDefault.objectForKey("credentials") as? [[String:AnyObject]] ?? [[String:AnyObject]]()
let email =
[
"email" : addEmail.text!,
"password": addPassword.text!
]
storedCredentials.append(email)
userDefault.setObject(storedCredentials, forKey: "credentials")
userDefault.synchronize()
答案 2 :(得分:3)
在Swift中保存Swift数组。
let kUserDefault = NSUserDefaults.standardUserDefaults()
kUserDefault.setObject(["KIRIT" , "MODI" , "FIRST" , "LAST"], forKey: "nameArray")
kUserDefault.synchronize()
获取数组
<强> 1。 arrayForKey:你得到Swift数组
kUserDefault.arrayForKey("nameArray")!
<强> 2。 objectForKey:你得到了NSArray
kUserDefault.objectForKey("nameArray")!
第3。 valueForKey:你得到了NSArray
kUserDefault.valueForKey("nameArray")
答案 3 :(得分:0)
如果查看documentation,则无法在NSUserDefault中保存[String]数组:
对于NSArray和NSDictionary对象,其内容必须是属性 列出对象。
您可以做的是将[String]
转换为NSData
,然后将其保存到NSUserDefault。
// Store it as NSData
var emailData = [String]()
emailData.append("email1")
emailData.append("email2")
let emailIntoNSData = NSKeyedArchiver.archivedDataWithRootObject(emailData)
NSUserDefaults.standardUserDefaults().setObject(emailIntoNSData, forKey: "emailData")
// Retrieve it :
let emailFromNSData = NSUserDefaults.standardUserDefaults().objectForKey("emailData") as? NSData
if let emailFromNSData = emailFromNSData {
let emailArray = NSKeyedUnarchiver.unarchiveObjectWithData(emailFromNSData) as? [String]
if let emailArray = emailArray {
NSLog("Email Data : \(emailArray)") // ["email1","email2"]
// do something…
}
}