Ios 无法从Swift中的UserDefaults获取具有多个对象的NSMutableArray
我有一个自定义类,它存储用户的登录信息。 应用程序一次可以有多个用户登录 这就是我将登录用户数据存储到UserDefaults的方式Ios 无法从Swift中的UserDefaults获取具有多个对象的NSMutableArray,ios,swift,xcode,nsuserdefaults,Ios,Swift,Xcode,Nsuserdefaults,我有一个自定义类,它存储用户的登录信息。 应用程序一次可以有多个用户登录 这就是我将登录用户数据存储到UserDefaults的方式 let userDefaults = UserDefaults.standard let decoded = userDefaults.data(forKey: "CPContactInfo") 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
arrayOfArray.add(qidInfo)
}
} else {
print("userdefault not exist")
arrayOfArray.add(qidInfo)
}
addQID(qid_info: arrayOfArray)
其中qidInfo
是类QBM_CPContactInfo
的自定义对象,我将其存储在数组中,
首先,我第一次检查给定键的UserDefault是否存在,然后将我的qidInfo
对象添加到数组arrayOfArray
中,然后通过调用函数addQID(qid\u 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
非常好
当我尝试从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中添加了两项
谁能告诉我我做错了什么
此外,我需要比较的电子邮件的用户选择,这是在
让title=action.title
和qid_info?.qidEmail.
任何帮助都将不胜感激。
提前感谢。您可以采用以下方法
让userDefaults=userDefaults.standard
let decoded=userDefaults.data(forKey:“CPContactInfo”)
如果userDefaults.object(forKey:“CPContactInfo”)!=零{
让decodedTeams=NSKeyedUnarchiver.unarchiveObject(带:decoded!)作为!数组
arrayOfArray=解码团队
arrayOfArray.append(qidInfo)
}否则{
arrayOfArray.append(qidInfo)
}
添加qid(qid_信息:arrayOfArray)
这里,首先,从临时数组中的默认值获取保存的数组,并将该临时数组复制到现有数组中。
然后向其中添加新元素,并为同一密钥保存更新后的数组。如果
CPContactInfo
未存储在UserDefaults
中,则仅添加到arrayOfArray
?是否要检索数组,然后始终添加条目,无论其是否已存储?是的,我始终要添加条目。只有当元素已经存在时,我才不会添加。但我知道我的这个条件将不起作用,因为我无法登录已经登录。因此,每次登录成功时,我都希望将元素添加到arrayOfArray中,然后将该数组添加到UserDefaultsEvery中,每次在let decodedTeams=NSKeyedUnarchiver.unarchiveObject(with:decoded!)行检索UserDefaults时都是如此!NSMutableArray
它只将计数作为1项,但实际上我在其中添加了2项。是的,我认为我以前的观察结果是不正确的。好的,那么这个语句呢:如果decodedTeams==qidInfo
?这应该是比较NSMutableArray
的两个实例吗?是的,这只是我为了检查而添加的,如果条件永远不会得到执行。我有其他方法,以前执行检查相同的登录用户。我现在已经编辑了代码。:-谢谢。按照这个方法解决我的问题。