2016-05-02 9 views
1

So habe ich für ein paar Stunden für eine Möglichkeit versucht, ein Array zu NSUserDefault zu speichern und sie in die Zellen zu drucken, aber die Daten speichern nicht als ein Array, es speichert grundsätzlich nur einen Wert zu einem Zeitpunkt.Wie wird Array in NSUserDefault in Swift gespeichert?

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() 
    */ 


} 

Also im Grunde die Daten nicht speichern.

+0

versuchen Sie storedEmail & storedPasswords drucken –

Antwort

4

können Sie Array speichern, auf diese Weise

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

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

Es ist möglich, Arrays in NSUserDefaults zu speichern. Das Trennen von E-Mail und Passwort in einem separaten Array ist jedoch nicht geeignet. Sie sollten es als ein Objekt speichern, da sie verwandt sind.

In Ihrem Fall ist ein Array von Dictionary-Objekten besser, was auch in NSUserDefaults gespeichert werden kann, die Sie als Dictionary-Array abrufen können. Hier

ist die Probe:

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

Sie nicht ein Array von [Zeichenfolge] in NSUserDefault sparen können, wenn man sich die documentation aussehen:

Für NSArray und NSDictionary Objekte, ihre Inhalt muss Eigenschaft sein Objekte auflisten.

Also, was können Sie tun, ist konvertieren Ihre [String] in NSData dann in NSUserDefault speichern.

// 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

Speichern Sie das Swift Array in Swift.

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

Array

1. arrayForKey Erhalten: Sie Swift Array bekommen

kUserDefault.arrayForKey("nameArray")! 

2. objectForKey: Sie NSArray bekommen

kUserDefault.objectForKey("nameArray")! 

3. ValueForKey: Sie bekommen NSArray

kUserDefault.valueForKey("nameArray") 

See More Details