无法从 Swift 中的 UserDefaults 获取具有多个对象的 NSMutableArray



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

这就是我将登录的用户数据存储到 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)

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

这就是我的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

完全。

当我尝试从用户默认值中检索数据时,如下所示,

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)
}

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

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

此外,我需要比较所选用户的电子邮件,该电子邮件位于let title = action.titleqid_info?.qidEmail.一起

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

您可以使用以下方法。

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)

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

最新更新