Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法从Swift中的UserDefaults获取具有多个对象的NSMutableArray_Ios_Swift_Xcode_Nsuserdefaults - Fatal编程技术网

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

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 {

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

这就是我将登录用户数据存储到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\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
的两个实例吗?是的,这只是我为了检查而添加的,如果条件永远不会得到执行。我有其他方法,以前执行检查相同的登录用户。我现在已经编辑了代码。:-谢谢。按照这个方法解决我的问题。