Swift NSUserDefaults用于Array的setObject

时间:2015-06-05 14:33:39

标签: arrays swift nsuserdefaults

我需要使用NSUserDefaults保存一个我从jSON获得的数组,问题是它只保存第一个字符串而不是所有数组。因此,如果阵列就像纽约,伦敦,罗马......它只保存NewYork。我用它作为选择器视图。 这是代码:

修改 用于从jSON保存数组:

   if let jsonData = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: &error) as? [String:AnyObject] { // dictionary
                if let locationsArray = jsonData["locations"] as? [[String:AnyObject]] { // array of dictionaries
                    for locationDictionary in locationsArray { // we loop in the array of dictionaries
                        if let location = locationDictionary["location_name"] as? String { // finally, access the dictionary like you were trying to do
                           // println(location)

                            var locationSave: Void = save.setObject(location, forKey: "Location")




                        }
                    }
                }
            }



        }

并且对于请求数组:

  var Location = save.objectForKey("Location")!

        var pickerviewFields = Location

   return pickerviewFields.count

提前致谢!

2 个答案:

答案 0 :(得分:1)

您只能保存NSArray,如果Array是Swift Array,您需要转换它。另外,NSArray和NSDictionary对象,其内容必须是属性列表对象。

以下是如何转换数组:

var MyArray = ["a", "b", "c"]
var MyNSArray: NSArray

MyNSArray = MyArray as NSArray

println("\(MyNSArray)")

打印:(a,b,c)

我有一个小样本JSON:

    var myJSONString: NSString = "{ \"locations\" : [ { \"location_name\" : \"A\" }, { \"location_name\" : \"B\" }, { \"location_name\" : \"C\" }, { \"location_name\" : \"D\" } ] }"
    var urlData: NSData? = NSData()
    var error: NSError?
    var save = NSUserDefaults.standardUserDefaults()

    urlData = myJSONString.dataUsingEncoding(NSUTF8StringEncoding)

    if let jsonData = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: &error) as? NSDictionary { // dictionary
        if let locationsArray = jsonData["locations"] as? NSArray { // array of dictionaries
            for locationDictionary in locationsArray { // we loop in the array of dictionaries
                if let location = locationDictionary["location_name"] as? NSString { 
                    println(location)
                }
            }
            NSUserDefaults.standardUserDefaults().setObject(locationsArray, forKey: "locationArray")
        }
    }

    println(save.dictionaryRepresentation())

答案 1 :(得分:0)

你可以试试这个:

<强>编写

let locationArray = ["London", "NewYork", "Rome"]
let locationData = NSKeyedArchiver.archivedDataWithRootObject(locationArray)
NSUserDefaults.standardUserDefaults().setObject(locationData, forKey: "Location")
NSUserDefaults.standardUserDefaults().synchronize()

<强>读

let locationData = NSUserDefaults.standardUserDefaults().objectForKey("Location") as? NSData
if let locationData = locationData {
    let locationArray = NSKeyedUnarchiver.unarchiveObjectWithData(locationData) as? [String]

    if let locationArray = locationArray {
        println(locationArray)
    }
}