【问题标题】:Second Array item gets removed第二个数组项被删除
【发布时间】:2016-03-15 00:04:20
【问题描述】:

我正在从 CloudKit 中提取数据以放入一个数组中。

我有 3 个可以拉取的项目:MondayTuesdayWednesday

我将它们放入existingArray,但是当我运行应用程序时,我得到:["Monday", "Tuesday"],然后当它第二次运行时我得到["Monday", "Wednesday"],我不知道为什么?

    for days in results! {
        let nD = DayClass()
        nD.dayOfTheWeek = days[“D”] as! String
        let defaults = NSUserDefaults.standardUserDefaults()
            if var existingArr = defaults.arrayForKey("D") as? [String] {
                if existingArr.contains(days["D"] as! String) == false {
                    existingArr.append(nd.dayOfTheWeek)
                }
            } else {
                defaults.setObject([nD.dayOfTheWeek], forKey: "D")
            }
        }

编辑:如果我在追加后添加defaults.setObject([nD.dayOfTheWeek], forKey: "D")existingArray 将变为["Monday", "Tuesday"] 然后["Tuesday", "Wednesday"]。我无法将所有 3 项都保留在 existingArray 中。

【问题讨论】:

  • 如果contains 通过,那么您将一个元素附加到existingArr,但在循环的下一次迭代中您只需再次覆盖它。就代码而言,看起来你需要在append 之后setObject
  • 如果我在append 之后添加defaults.setObject([nD.dayOfTheWeek], forKey: "D"),那么由于某种原因数组运行["Monday", "Tuesday"] 然后["Tuesday", "Wednesday"]。我不能让它以某种方式将所有 3 个项目保留在数组中
  • 你必须保存整个数组 - defaults.setObject(existingArr, forKey: "D").
  • 是的,我们开始了!如果您想将其作为答案,我可以将其标记为已解决?

标签: ios swift nsarray nsuserdefaults


【解决方案1】:

您需要在append 之后将existingArr 保存回默认值。大致如下:

for days in results! {
    let nD = DayClass()
    nD.dayOfTheWeek = days[“D”] as! String
    let defaults = NSUserDefaults.standardUserDefaults()
        if var existingArr = defaults.arrayForKey("D") as? [String] {
            if existingArr.contains(days["D"] as! String) == false {
                existingArr.append(nd.dayOfTheWeek)
                defaults.setObject(existingArr, forKey: "D")
            }
        } else {
            defaults.setObject([nD.dayOfTheWeek], forKey: "D")
        }
    }

【讨论】:

  • 非常感谢,非常感谢
猜你喜欢
  • 1970-01-01
  • 2020-08-17
  • 2017-08-08
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多