无法从 Swift 中的 UserDefaults 获取具有多个对象的 NSMutableArray
Unable to get NSMutableArray with multiple Object from UserDefaults in Swift
我有自定义 class 存储用户的登录信息。
应用程序可以有多个用户同时登录。
这就是我将登录用户数据存储到 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
是 class QBM_CPContactInfo
的自定义对象,我将其存储在数组中,
起初我第一次检查给定键是否存在 UserDefault,然后将我的 qidInfo
对象添加到数组 arrayOfArray
中,然后通过调用函数 [=19= 将该数组保存到 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)
}
它只在 return 中为 decodedTeams
提供了一个对象作为 NSMutableArray,但实际上我在 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)
在这里,首先,从临时数组中的默认值中获取保存的数组,并将该临时数组复制到现有数组中。
然后将新元素追加到其中,并为相同的键保存更新后的数组。
我有自定义 class 存储用户的登录信息。 应用程序可以有多个用户同时登录。
这就是我将登录用户数据存储到 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
是 class QBM_CPContactInfo
的自定义对象,我将其存储在数组中,
起初我第一次检查给定键是否存在 UserDefault,然后将我的 qidInfo
对象添加到数组 arrayOfArray
中,然后通过调用函数 [=19= 将该数组保存到 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)
}
它只在 return 中为 decodedTeams
提供了一个对象作为 NSMutableArray,但实际上我在 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)
在这里,首先,从临时数组中的默认值中获取保存的数组,并将该临时数组复制到现有数组中。 然后将新元素追加到其中,并为相同的键保存更新后的数组。