swift - 在 Swift 4 中取消存档 NSMutableArray

标签 swift nsmutablearray nsuserdefaults

我将对象添加到 NSMutableArray 并使用 NSKeyedArchiver 和 UserDefaults 对其进行存档。

对象被添加到数组中,我可以从日志控制台看到它。我还可以看到存档对象包含该对象。

问题是每当我解压对象并将它们添加到可变数组时,它总是返回 1,无论我添加多少个对象。

这是我得到的:

将对象保存到数组

trackNumberOfQuestionPlayed.add(questionsArray[randomQuestion] as AnyObject)

let saveQuestionsPlayed = NSKeyedArchiver.archivedData(withRootObject: trackNumberOfQuestionPlayed)
UserDefaults.standard.set(saveQuestionsPlayed, forKey: "QuestionsPlayed")
UserDefaults.standard.synchronize()

print(UserDefaults.standard.object(forKey: "QuestionsPlayed"))

检索对象

if let data = UserDefaults.standard.object(forKey: "QuestionsPlayed") as? Data {

   if let trackNumberOfQuestionPlayed = (NSKeyedUnarchiver.unarchiveObject(with: data) as? NSMutableArray)
    {
       // In here you can access your array
       print("Number of questions array is NOT empty: \(trackNumberOfQuestionPlayed.count)")
    }
}

最佳答案

好吧,我正在回答我自己的问题。事实证明,通过一些调整,您可以保存一个数组,如我的问题中所述。事实证明,我的问答游戏中的其他一些代码把这一切搞得一团糟。整理了一下,现在下面的代码可以工作了:

将对象保存到数组

 trackNumberOfQuestionPlayed.add(questionsArray[randomQuestion] as AnyObject)
            let saveQuestionsPlayed = NSKeyedArchiver.archivedData(withRootObject: trackNumberOfQuestionPlayed)
            UserDefaults.standard.set(saveQuestionsPlayed, forKey: "QuestionsPlayed")
            UserDefaults.standard.synchronize()
            print("Count: \(trackNumberOfQuestionPlayed.count)")

检索对象

if let data = UserDefaults.standard.object(forKey: "QuestionsPlayed") as? Data {

            if let trackNumberOfQuestionPlayed = (NSKeyedUnarchiver.unarchiveObject(with: data) as? NSMutableArray)
            {
                // In here you can access your array
                self.trackNumberOfQuestionPlayed = trackNumberOfQuestionPlayed
                print("Number of questions array is NOT empty: \(trackNumberOfQuestionPlayed.count)")
            }
        } else {

            trackNumberOfQuestionPlayed = NSMutableArray()
            print("questionsplayed is empty")
        }

关于swift - 在 Swift 4 中取消存档 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48965285/

相关文章:

swift - 在屏幕边缘生成 Sprite ,同时将 anchor 保持在中心

ios - 带有 tableView 按钮的交互式标题

ios - 如何在 iOS 中将数组作为参数发送给 json 服务

Objective-C:复制数组,仅在复制中修改元素(对象)

ios - Xcode iOS : check if user is logged in and show different views if not

ios - 高度错误的模态 UINavigationController 栏

ios - 生成时在xcode中获取错误-PhaseScriptExecution失败,退出代码非零

ios - 如何将 UITextView 数据存储到 NSMutablearray 中?

ios - NSUserDefaults 在关闭应用程序时删除 key

macos - NSData 大小和 NSUserDefaults