【发布时间】: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)
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.
任何帮助将不胜感激。 提前致谢。
【问题讨论】:
-
如果
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