【问题标题】:Saving and retrieving from NSArray using NSUserDefaults - Swift使用 NSUserDefaults 从 NSArray 保存和检索 - Swift
【发布时间】:2015-05-20 20:35:50
【问题描述】:

我一直在尝试将一个数组保存到 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).

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

【问题讨论】:

  • 你存储的是字符串而不是数组。
  • @NekakKinich,但我需要每次将一个项目存储到一个数组中?这不可能吗?
  • 可以存储所有数组,但是如果重复存储“数组”,只能覆盖同一个key。

标签: ios swift nsarray nsuserdefaults


【解决方案1】:

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

改为:

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

【讨论】:

  • 你的意思是你反复更新数组,只想存储差异?你不能,每次都存储整个数组。
  • 是的,这就是为什么我使用 indexPath.row .. 任何可能的方式?
  • 仅通过将每个项目存储在用户默认值的不同键中 - 每次只需保存整个数组
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2014-10-05
    • 2023-03-31
    相关资源
    最近更新 更多