我有一个自定义类,用于存储用户的登录信息。
应用程序可以一次登录多个用户。
这就是将登录的用户数据存储到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
中,然后通过调用函数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.title
和qid_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)
在这里,首先,从默认值中获取一个临时数组中保存的数组,然后将该临时数组复制到现有数组中。
然后将新元素添加到其中,并为相同的键保存更新的数组。