我一直试图将数组保存到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
因为我每次都在数组中存储项目。不是整个阵列同时。就像我要反复更新阵列一样。
答案 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