如何存储自定义对象数组(目标)

2023-12-11

如何存储在 NSUserDefaults 中创建的 Goal 类型的对象数组? (快速)

这是代码:

func saveGoalList ( newGoalList : [Goal] ){
    let updatedGoalList = newGoalList;
    NSUserDefaults.standardUserDefaults().setObject(updatedGoalList, forKey: "GoalList")
    NSUserDefaults.standardUserDefaults().synchronize()
}

class GoalsViewController: MainPageContentViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet var tableView: GoalsTableView!

    var cell = GoalTableViewCell()

    var goalsArray : Array<Goal> = [] //

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.delegate = self
        self.tableView.dataSource = self

        if var storedGoalList: [Goal] = NSUserDefaults.standardUserDefaults().objectForKey("GoalList") as? [Goal]{
            goalsArray = storedGoalList;
        }
        var goal = Goal(title: "Walk the Dog")
        goalsArray.append(goal)
        saveGoalList(goalsArray)

        self.tableView?.reloadData()

        tableView.estimatedRowHeight = 44.0
        tableView.rowHeight = UITableViewAutomaticDimension

        self.xpnotificationView.alpha = 0.0
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return goalsArray.count //to ensure there is always an extra cell to fill in.
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //recreate the cell and try using it.

        cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as GoalTableViewCell

        cell.goalTextField.text = goalsArray[indexPath.row].title as String!
        cell.checkmarkImageView.visible = goalsArray[indexPath.row].checkmarked as Bool!

        if (cell.checkmarkImageView.visible == true) {
            cell.blackLineView.alpha = 1.0
        } else {
            cell.blackLineView.alpha = 0.0
        }

        return cell
    }

}

据我所知,只有某些数据类型适用于 NSUserDefaults。谁能帮助我理解我该如何做到这一点?

编辑:现在 Goal 继承自 NSObject。


我正在发布一个学习项目的代码,该项目是我使用 NSCoding 存储对象的。功能齐全,随时可用。存储游戏变量等的数学游戏。

//********This class creates the object and properties to store********
import Foundation
class ButtonStates: NSObject {

    var sign: String = "+"
    var level: Int = 1
    var problems: Int = 10
    var time: Int = 30
    var skipWrongAnswers = true

    func encodeWithCoder(aCoder: NSCoder!) {
        aCoder.encodeObject(sign, forKey: "sign")
        aCoder.encodeInteger(level, forKey: "level")
        aCoder.encodeInteger(problems, forKey: "problems")
        aCoder.encodeInteger(time, forKey: "time")
        aCoder.encodeBool(skipWrongAnswers, forKey: "skipWrongAnswers")
    }

    init(coder aDecoder: NSCoder!) {
        sign = aDecoder.decodeObjectForKey("sign") as String
        level = aDecoder.decodeIntegerForKey("level")
        problems = aDecoder.decodeIntegerForKey("problems")
        time = aDecoder.decodeIntegerForKey("time")
        skipWrongAnswers = aDecoder.decodeBoolForKey("skipWrongAnswers")
    }

    override init() {
    }
}




   //********Here is the data archiving and retrieving class********
    class ArchiveButtonStates:NSObject {

        var documentDirectories:NSArray = []
        var documentDirectory:String = ""
        var path:String = ""

        func ArchiveButtons(#buttonStates: ButtonStates) {
            documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
            documentDirectory = documentDirectories.objectAtIndex(0) as String
            path = documentDirectory.stringByAppendingPathComponent("buttonStates.archive")

            if NSKeyedArchiver.archiveRootObject(buttonStates, toFile: path) {
                //println("Success writing to file!")
            } else {
                println("Unable to write to file!")
            }
        }

        func RetrieveButtons() -> NSObject {
            var dataToRetrieve = ButtonStates()
            documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
            documentDirectory = documentDirectories.objectAtIndex(0) as String
            path = documentDirectory.stringByAppendingPathComponent("buttonStates.archive")
            if let dataToRetrieve2 = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? ButtonStates {
                dataToRetrieve = dataToRetrieve2 as ButtonStates
            }
            return(dataToRetrieve)
        }
    }


the following is in my ViewController where the game is played.  Only showing the relevant code for retrieving and storing objects

class mathGame: UIViewController {

var buttonStates = ButtonStates()

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //set inital view

        //retrieving a stored object & placing property into local class variables
        buttonStates = ArchiveButtonStates().RetrieveButtons() as ButtonStates
        gameData.sign = buttonStates.sign
        gameData.level = buttonStates.level
        gameData.problems = buttonStates.problems
        gameData.time = buttonStates.time

    }

override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

      //storing the object
      ArchiveButtonStates().ArchiveButtons(buttonStates: buttonStates)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何存储自定义对象数组(目标) 的相关文章

  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • 为什么这个谓词格式会变成 '= nil'

    有人建议这个线程 https stackoverflow com questions 40686005 nspredicate crash after swift 3 migration与我的问题完全相同 但是 我的应用程序没有崩溃 并且我
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我的游戏中应该有多少个视图控制器?

    我开始使用 spritekit 构建我的第一个游戏 现在我只有一个视图控制器来呈现开始屏幕场景 override func viewDidLoad super viewDidLoad let scene StartScreenScene C
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController

随机推荐

  • java.lang.NoSuchMethodError:Scala Spark 作业中的 scala.Predef$.refArrayOps

    完整错误 线程 main 中的异常java lang NoSuchMethodError scala Predef refArrayOps Ljava lang Object Ljava lang Object 在 org spark mo
  • Python tkinter:在放置()d后隐藏小部件

    如何在显示后隐藏小部件 框架 place 例如 lbl tkinter Label root text A label lbl place relx 0 5 rely 0 5 lbl Hide the label 答案是 place for
  • 如何从设备相关的 HBITMAP 构造 GDI+ 位图对象

    我想使用GDI 方法Image Save 保存一个DDB到以下场景中的文件 HBITMAP hBitmap CreateCompatibleBitmap hDC 200 200 hBitmap is a DDB so I need to p
  • 应用程序加载器错误,二进制文件无效

    当我尝试将我的应用程序发送到 App Store 时 出现此错误 二进制文件无效 LC ENCRYPTION INFO 加载命令中的加密信息丢失或无效 或者二进制文件已加密 这个二进制文件似乎不是使用 Apple 的链接器构建的 我不知道我
  • 防止浏览器阻止 Google 选择器弹出窗口

    我已经使用 javascript 在我的网站中实现了 Google Picker 但是每当按下初始化选择器的按钮时 它就会被浏览器阻止 我在这里搜索并尝试了一些解决方案 例如 Adding client js代替api js Setting
  • java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap

    真正的java新手 西班牙语使用者 所以 我会尽力让你理解我 我制作了一个程序 它管理一个 mysql 数据库 用于存储客户 有关客户的信息等 并生成 或也尝试 报告 我从 Eclipse Market 安装了 JasperReports
  • Xcode 调试构建与发布构建

    我目前正在使用 expo 构建一个 React Native 应用程序 然而 我需要使用 cocoapods 这就是我现在使用 Xcode 的原因 自从我切换到 Xcode 以来 我的本地调试构建 我运行到 USB 连接的 iPhone 与
  • iPhone - 屏幕旋转?

    有什么区别UIDeviceOrientation UIInterfaceOrientation 我应该使用哪一个来检测 UIView 上的旋转 UIDeviceOrientation为您提供有关物理设备本身的信息 同时UIInterface
  • Eclipse 中的应用程序崩溃

    我是 Android 应用程序开发新手 我已经安装了 Android SDK 工具修订版 20 0 3 Android SDK 工具修订版 20 0 3 Android SDK 平台工具 Rev 3 Android 2 3 3 API 10
  • 无法在 IPAD 上安装我的应用程序(冻结在“正在安装”)

    我使用 Adob e Flash CC 创建了一个 AS3 应用程序 我使用的是AIR 3 9 它在 Android 设备上运行得很好 但是当我创建了 ipa 文件并将其传输到我的 Ipad 使用 IO7 时 我的应用程序可见 但在 安装
  • 如何在 Python 中连接文件?

    我有多个 40 到 50 个 MP3 文件 我想将它们连接成一个文件 在 Python 中执行此操作的最佳方法是什么 Use fileinput模块循环遍历每个文件的每一行并将其写入输出文件 外包给windowscopy命令 将这些文件中的
  • 向小部件添加标签

    我正在尝试使用 Qt 将标签添加到主窗口 这是一段代码 int main int argc char argv QApplication app argc argv QWidget Main Window QPixmap Image Ima
  • JavaScript reload() 是否会停止处理页面的其余部分?

    在我的测试中 JavaScriptreload 函数似乎阻止了它后面的代码执行 但任何人都可以确认这是真的100 的时间 假设用户启用了 JavaScript 并且没有花哨的技巧 That is
  • 对于包含空格的文件路径,FFMPEG 命令失败

    我正在执行以下操作ffmpeg用于修剪视频的命令 我遇到的问题是 如果文件路径包含空格 则命令失败 我尝试了多种方法来处理空格 但除了将文件移动到没有空间的路径然后执行命令之外 没有一种方法有效以新文件路径作为源 下面是命令 execFFm
  • 正则表达式删除所有后面不跟数字的句点

    I have str replace 0 9 g 但它会删除除句点和句点后面的数字之外的所有内容 例如 3 14 变为 1 我想要的是 3 14 gt 3 14 hello world gt helloworld hi gt hi hi 2
  • MongoDB ObjectID 为何是 12 字节?

    据我所知 MongoDB中的字符串以UTF 8存储 因此每个字符在1到4个字节之间 MongoDB 文档对 ObjectID 有如下描述 返回新的 ObjectId 值 12 字节的 ObjectId 值包括 一个 4 字节值 表示自 Un
  • 处理播放中动态创建的文件 2

    我编写了一个小应用程序 可以使用 play 2 0 创建可下载的 pdf 文件 我想为公众服务 在我的开发环境中 我创建了一个文件夹 assets 文件夹 一切都很好 现在 当切换到生产环境时 我发现 play 总是在我背后部署这些文件 我
  • MySQL 上 Django 中的列数据太长

    对于模型中声明为的列 我收到此错误TextField数据库中是一个 LONGTEXT 而我尝试插入的值只有 3KB 长 AFAIK LONGTEXT 理论限制是 2GB 所以我不知道为什么有这个限制或如何绕过它 有任何想法吗 我得到的具体异
  • ngx-capture :无法捕获屏幕捕获区域内的

    我无法捕捉 img 在屏幕捕获区域内 我想要一个定义的部分 其中包含要捕获的图像和内容 我们怎样才能做到这一点 帮助 Visit https stackblitz com edit ngx capture div angular wnkjw
  • 如何存储自定义对象数组(目标)

    如何存储在 NSUserDefaults 中创建的 Goal 类型的对象数组 快速 这是代码 func saveGoalList newGoalList Goal let updatedGoalList newGoalList NSUser