【问题标题】:Replace elements of an NSMutableArray替换 NSMutableArray 的元素
【发布时间】:2015-02-28 20:33:44
【问题描述】:

我在 WeatherData 数组中放入了 4 个变量输入。我的数组似乎也在适当的范围内添加它们(即 [0]-[3] 但我真的想用新信息替换当前信息。

我最初做的是:

if NSUserDefaults.standardUserDefaults().objectForKey("WeatherData")  != nil {

    WeatherData = NSUserDefaults.standardUserDefaults().objectForKey("WeatherData") as NSMutableArray

    DisplayInfo(WeatherData[0] as String, Temperature: WeatherData[1] as Int, Code: WeatherData[2] as String, Condition: WeatherData[3] as String)
}

然后我做一些事情,最后我保存它:

WeatherData.replaceObjectsInRange(0.3, withObjectsFromArray: [placemark.locality, Temperature, Code, Condition])

NSUserDefaults.standardUserDefaults().setObject(WeatherData as NSArray, forKey: "WeatherData")

每次迭代我的数组都会变大,如下所示:

(
"San Francisco",
50,
33,
Fair,
"San Francisco",
50,
33,
Fair,
"San Francisco",
50,
33,
Fair,
"San Francisco",
50,
33,
Fair
)

但应该只是

(
"San Francisco",
50,
33,
Fair,
)

意味着内容应该被替换并保存在 NSUserDefaults 中。

提前感谢您的帮助 王牌

【问题讨论】:

    标签: ios arrays swift nsuserdefaults


    【解决方案1】:

    问题是您的错误和 Swift 中的错误(我想)的组合。

    你是这么说的:

    WeatherData.replaceObjectsInRange(0.3, withObjectsFromArray: [placemark.locality, Temperature, Code, Condition])
    

    您正在传递 0.3Double 文字),但 replaceObjectsInRange:withObjectsFromArray: 期望 NSRange 用于该参数。编译器应该在这里给你一个错误。

    但是,编译器将您的文字隐式转换为NSMakeRange(0,0),因此replaceObjectsInRange:withObjectsFromArray: 将新元素插入到数组的开头。

    试试这个:

    WeatherData.replaceObjectsInRange(NSRange(0 ... 3), withObjectsFromArray: [placemark.locality, Temperature, Code, Condition])
    

    【讨论】:

    • 啊,我是如此接近,我在玩 NSRange 但无法正确使用语法。非常感谢您的反馈!!
    • 我确实注意到,在我的 ipad 上执行此代码时,我收到以下错误:'-[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object' 我在某处读到这个您不能将 NSMutableArray 放入 NSUserDefaults。我想不出一个不是解决方法的解决方案。就像先将 WeatherData 放入 NSArray 然后放入 NSUserDefaults 一样。
    【解决方案2】:

    感谢 rob mayoff 的帮助,这里是我的代码的副本:

    if WeatherData.count == 0 {
    
        WeatherData.addObjectsFromArray([placemark.locality, Temperature, Code, Condition])
    
    } else {
    
    WeatherData.replaceObjectsInRange(NSRange(0 ... 3), withObjectsFromArray: [placemark.locality, Temperature, Code, Condition])
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多