【问题标题】:Append to array in UserDefaults附加到 UserDefaults 中的数组
【发布时间】:2017-04-05 10:25:49
【问题描述】:

首先我将保存在用户默认值中的现有数组导入 key - array1

var savedArray = UserDefaults.standard.array(forKey: "array1") as! [String]
var ns = UserDefaults.standard

然后

let savedValue = name

然后

savedArray.append(savedValue!) 

然后我把它保存在key-array1中

UserDefaults.standard.set(savedArray, forKey: "array1")

然后同步

ns.synchronize()

但是,如果我进入另一个视图控制器并执行此操作

let alreadyShownarray = UserDefaults.standard.object(forKey: "array1") as! [String]
print (alreadyShownarray)

然后我得到相同的数组,没有附加 savedValue!

【问题讨论】:

  • UserDefaults.standard.set(array2, forKey: "array1") 您正在保存array2,但从未提及。你是说savedArray:UserDefaults.standard.set(savedArray, forKey: "array1")?只是问题上的错误?
  • ns从何而来?
  • @RaduDiță var ns = UserDefaults.standard
  • 返回的数组是结构体或按值/副本传递。如果您制作了图纸的副本,在副本中添加细节不会影响原件。

标签: arrays swift sorting


【解决方案1】:

尝试删除对象并添加新对象。

UserDefaults.standard.removeObject(forKey: "array1")
UserDefaults.standard.set(savedArray, forKey: "array1")

【讨论】:

    【解决方案2】:

    您可以获取该数组,将其分配给一个变量,附加您的元素,然后将对象设置为您用于获取的相同键。

    func enqueue(localNotificationModel: LocalNotificationModel) {
        guard let localNotificationJSON = UserDefaults.standard.value(forKey: localNotificationKey) as? [[String: Any]] else { return }
        var localNotifiactions = localNotificationJSON.compactMap { LocalNotificationModel(json: $0)}
        localNotifiactions.append(localNotificationModel)
        UserDefaults.standard.set(localNotifiactions, forKey: localNotificationKey)
    }
    

    【讨论】:

      【解决方案3】:

      您不能直接从 NSUserDefault 更新数组。您必须创建一个新数组并从 NSUserDefault 分配现有数组,然后您可以将该新数组设置为 NSUserDefault 一个

      var newArray = [String]() //2.create a new array and assign the UserDefault array1 here
      
      var ns = UserDefaults.standard
      
      let savedArray = ns.array(forKey: "array1") as! [String] //1.this is protected cannot update directly
      
      let savedValue: String = "name" //3. the value you wanted to append
      
      newArray = savedArray //4. just copying the value here
      
      newArray.append(savedValue) //5. appending the new value
      
      ns.set(newArray, forKey: "array1") //6. now the value "name" is saved.
      
      // array1[0] = "your initial value"
      // array1[1] = "name"
      
      
      
      
      
      
      

      【讨论】:

        猜你喜欢
        • 2018-05-16
        • 2018-06-16
        • 1970-01-01
        • 2017-12-24
        • 2019-09-15
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 2015-06-14
        相关资源
        最近更新 更多