如何在Swift的NSUserDefault中存储Array?
所以我已经尝试了几个小时的方法来将数组存储到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() */ }
所以基本上数据没有保存。
您也可以通过这种方式存储数组
let userDefault = NSUserDefaults.standardUserDefaults() let arr = ["abc","xyz","pqr"] userDefault.setObject(arr, forKey: "arr") userDefault.synchronize() let data = userDefault.objectForKey("arr") as! [String]
可以在NSUserDefaults中存储数组。 但是在单独的arrays中分离电子邮件和密码是不合适的。 您应该将它存储为一个对象,因为它们是相关的。
在你的情况下,一个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()
在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")
如果查看文档 ,则无法在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… } }
- 令人敬畏的事情比比皆是:在Bitrise上尝试“ iOS自动配置”步骤! 🚀
- 在iOS上debugging离子应用程序?
- 如何将armv7s架构添加到xcode 7 / ios 9中的静态库?
- 垂直的UIScrollView?
- 将对象映射到用于TableView部分的2D数组Swift
- 将PDFAnnotationSubtype等于.widget的PDFAnnotation在将其添加到PDFPage后不会刷新其外观
- iOSmultithreading – NSURLSession和UI更新
- UIViewController调整自己viewWillAppear和viewDidAppear之间?
- 如何将数据从一个视图传递到iPhone中的另一个视图