使用NSUserDefaults从NSArray保存和检索 - Swift

时间:2015-05-20 20:35:50

标签: ios swift nsarray nsuserdefaults

我一直试图将数组保存到NSUserDefaults并将其检索到第二个数组,但它给了我强制转换。

我正在保存我的字符串数组:

 NSUserDefaults.standardUserDefaults().setObject(array[indexPath.row], forKey: "Array")

并检索到第二个数组:

 var second : NSArray!

        if (NSUserDefaults.standardUserDefaults().stringForKey("Array") != nil){
            second  =  NSUserDefaults.standardUserDefaults().objectForKey("Array")! as! NSArray
            println("\(second.count)")
        }

它给了我这个错误:

Could not cast value of type '__NSCFString' (0x19871b958) to 'NSArray' (0x19871c308).

我只是在将第一个数组作为String数组检索时将第一个数组存储到第二个数组中。为什么我使用indexPath.row因为我每次都在数组中存储项目。不是整个阵列同时。就像我要反复更新阵列一样。

2 个答案:

答案 0 :(得分:1)

您没有存储数组,而是存储数组中的一个项目,这恰好是一个字符串。这是因为您正在存储array[indexPath.row]而不仅仅是array

更改为:

NSUserDefaults.standardUserDefaults().setObject(array, forKey: "Array")

答案 1 :(得分:0)

NSArray不存储有关其中包含的对象类型的信息。如果您确定数组中的对象类型,则可以隐式或显式执行强制转换:

NSString *n = [arr objectAtIndex:1];  // implicit type conversion (coercion) from id to NSString*
NSString *n = (NSString *)[arr objectAtIndex:1];  // explicit cast