繁体   English   中英

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

[英]Unable to get NSMutableArray with multiple Object from UserDefaults in Swift

我有自定义类,用于存储用户的登录信息。 应用程序可以一次登录多个用户。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM