2016-05-02 7 views
1

NSUserDefaultに配列を格納してセルに出力する方法は数時間かけていますが、データは配列として保存されません。基本的には一度に1つの値しか保存されません。Swiftの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

を取得あなたはstoredEmail&storedPasswordsを印刷しようとしています –

答えて

4

あなたはこのよう

let userDefault = NSUserDefaults.standardUserDefaults() 
let arr = ["abc","xyz","pqr"] 
userDefault.setObject(arr, forKey: "arr") 
userDefault.synchronize() 

let data = userDefault.objectForKey("arr") as! [String] 
3

NSUserDefaultsに配列を格納することが可能であることで、あまりに配列を格納することができます。しかし、電子メールとパスワードを別々のアレイに分けることは適切ではありません。関連しているので、オブジェクトを1つのオブジェクトとして格納する必要があります。

あなたのケースでは、Dictionaryオブジェクトの配列が優れています。これは、NSUserDefaultsにも格納することができます。辞書の配列として取り出すことができます。あなたはdocumentationを見れば、あなたはNSUserDefaultで[文字列]の配列を保存することはできません

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

:ここ

はサンプルです

た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… 
     } 
} 
3

スイフトアレイをSwiftに保存します。

let kUserDefault = NSUserDefaults.standardUserDefaults() 
kUserDefault.setObject(["KIRIT" , "MODI" , "FIRST" , "LAST"], forKey: "nameArray") 
kUserDefault.synchronize() 

アレイに

1. arrayForKeyを取得します:あなたは

kUserDefault.arrayForKey("nameArray")! 

2. objectForKeyスウィフト配列を取得:あなたは

kUserDefault.objectForKey("nameArray")! 
NSArrayの

を取得10

3. valueForKey:あなたがNSArrayの

kUserDefault.valueForKey("nameArray") 

See More Details

関連する問題