【问题标题】:Unable to get NSMutableArray with multiple Object from UserDefaults in Swift无法从 Swift 中的 UserDefaults 获取具有多个对象的 NSMutableArray
【发布时间】:2019-08-30 17:47:39
【问题描述】:

我有存储用户登录信息的自定义类。 应用可以同时有多个用户登录。

这就是我将登录用户数据存储到 UserDefaults 的方式。

let userDefaults = UserDefaults.standard
        let decoded = userDefaults.data(forKey: "CPContactInfo")

        if userDefaults.object(forKey: "CPContactInfo") != nil {
            let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with: decoded!) as! NSMutableArray
                arrayOfArray.add(qidInfo)
            }
        } else {
            print("userdefault not exist")
            arrayOfArray.add(qidInfo)
        }
        addQID(qid_info: arrayOfArray)

qidInfoQBM_CPContactInfo 类的自定义对象,我将它存储在数组中, 起初,我第一次检查给定键的 UserDefault 是否存在,然后将我的 qidInfo 对象添加到数组 arrayOfArray 中,然后通过调用函数 addQID(qid_info: arrayOfArray) 将该数组保存到 UserDefault 中

这就是我的addQID 功能,

func addQID(qid_info: NSMutableArray) {
        let userDefaults = UserDefaults()
        let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: qid_info)
        userDefaults.set(encodedData, forKey: "CPContactInfo")
        userDefaults.synchronize()
    }

之后,当我添加第二个登录详细信息时,它会执行

if userDefaults.object(forKey: "CPContactInfo") != nil

完美。

当我尝试如下从 UserDefaults 中检索数据时,

let userDefaults = UserDefaults.standard
        let decoded = userDefaults.data(forKey: "CPContactInfo")
        if userDefaults.object(forKey: "CPContactInfo") != nil {
            let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with: decoded!) as! NSMutableArray
            print(decodedTeams)
            qid_info = decodedTeams.object(at: 0) as! QBM_CPContactInfo
            print(qid_info?.qidEmail)
        }

它只给了我一个对象作为 NSMutableArray 的 decodedTeams 的回报,但实际上我在 NSMutableArray 中添加了两个项目。

谁能告诉我我做错了什么。

我还需要比较所选用户的电子邮件 let title = action.titleqid_info?.qidEmail.

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 如果CPContactInfo 没有存储在UserDefaults 中,您只添加到arrayOfArray?你不想检索数组然后总是添加条目,不管它是否已经存储?
  • 是的,我一直想添加条目。只有元素已经存在,我才不会添加。但我知道我的这种情况不起作用,因为我无法登录已经登录。所以每次登录成功时,我都想将元素附加到 arrayOfArray,然后将该数组附加到 UserDefaults
  • 每次当我在 let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with: decoded!) as! NSMutableArray 行检索 UserDefaults 时,它只计算 1 项,但实际上我已经添加了 2 项。
  • 是的,我认为我之前的观察是不正确的。好的,那么这个声明呢:if decodedTeams == qidInfo?这应该是比较NSMutableArray 的两个实例吗?
  • 是的,这只是我为检查而添加的,无论如何 if 条件永远不会被执行。我有其他方法以前执行以检查相同的登录用户。我现在已经编辑了代码。

标签: ios swift xcode nsuserdefaults


【解决方案1】:

你可以有以下方法。

let userDefaults = UserDefaults.standard let decoded = userDefaults.data(forKey: "CPContactInfo") if userDefaults.object(forKey: "CPContactInfo") != nil { let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with: decoded!) as! Array<QBM_CPContactInfo> arrayOfArray = decodedTeams arrayOfArray.append(qidInfo) } else { arrayOfArray.append(qidInfo) } addQID(qid_info: arrayOfArray)

在这里,首先,从临时数组中的默认值中获取保存的数组,然后将该临时数组复制到现有数组中。 然后将新元素添加到其中并保存相同键的更新数组。

【讨论】:

  • :- 谢谢。遵循该方法并解决了我的问题。
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多