Arrays 数组的Swift NSUserDefaults setObject

Arrays 数组的Swift NSUserDefaults setObject,arrays,swift,nsuserdefaults,Arrays,Swift,Nsuserdefaults,我需要使用NSUserDefaults保存从jSON获取的数组,问题是它只保存第一个字符串,而不是所有数组。所以如果阵列像纽约、伦敦、罗马。。它只拯救了纽约。我使用它来选择视图。 代码如下: 编辑 要从jSON保存数组,请执行以下操作: if let jsonData = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: &error) as? [String:AnyObject] { //

我需要使用NSUserDefaults保存从jSON获取的数组,问题是它只保存第一个字符串,而不是所有数组。所以如果阵列像纽约、伦敦、罗马。。它只拯救了纽约。我使用它来选择视图。 代码如下:

编辑 要从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
var MyArray = ["a", "b", "c"]
var MyNSArray: NSArray

MyNSArray = MyArray as NSArray

println("\(MyNSArray)")

提前谢谢

只能保存NSArray,如果数组是Swift数组,则需要将其转换。此外,对于NSArray和NSDictionary对象,其内容必须是属性列表对象

以下是如何转换数组:

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

        var pickerviewFields = Location

   return pickerviewFields.count
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())
您可以尝试以下方法:

写作

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)
    }
}
阅读

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)
    }
}

您首先从哪里获得
location
?是一个带有数组的变量,我使用json从数据库中获得该数组。如果我在控制台中打印变量位置,我可以毫无问题地看到所有位置。。所以问题不在于var location,而在于“location”变量。我在答案中添加了一个小示例,说明如何从Swift数组转换到NSArray。至于从JSON转换整个结果,我建议将其转换为某种类型的数据对象,我使用了这个库:它说:String不能转换为NSArrayYou必须转换JSON结果,首先,类似这样的内容:jsonRes=NSJSONSerialization.JSONObjectWithData(returnData!.dataUsingEncoding(NSUTF8StringEncoding)!,选项:NSJSONReadingOptions.MutableContainers,错误:&err)作为?NSDictionaryChange this:[String:AnyObject]到这个:NSDictionarysame问题,字符串不能转换为NSArrayYes,这只是一个测试这是它打印的内容:[,][,][,][,][,][,][,][,][,][,][,]检查我所做的编辑。。我添加了JSON代码以获取数组“location”thanksChange this:
locationDictionary[“location\u name”]as?字符串:
locationDictionary[“location\u name”]作为?[字符串]