如何将自定义结构数组保存到 plist swift

2023-12-31

我正在尝试将警报数据保存到 plist,它采用类alertData 的数组的形式,我能找到的所有信息都指向对其进行编码,然后将其放入数组中,但我很困惑这是做什么的?我也不知道该怎么做,这是我的游乐场:任何帮助都会很棒

类(我正在尝试保存这些类的数组)

public class alertData: NSObject, NSCoding {
//Properties of the timer data - make optionals optional i.e. alert count etc.

var alertCounter: NSTimeInterval?
var alertText: String?
var alertColor: UIColor?
var alertColorIndex: Int?


//initialisation
init(alertCounter: Double, alertText: String, alertColor: UIColor, alertColourIndex: Int) {

    self.alertCounter = alertCounter
    self.alertText = alertText
    self.alertColor = alertColor
    self.alertColorIndex = alertColourIndex
}

public required init(coder aDecoder: NSCoder) {
    alertCounter = aDecoder.decodeDoubleForKey("Item1")
    alertText = aDecoder.decodeObjectForKey("Item2") as? String
    alertColor = aDecoder.decodeObjectForKey("Item3") as? UIColor
    alertColorIndex = aDecoder.decodeIntegerForKey("Item4")
}

public func encodeWithCoder(aCoder: NSCoder) {
    alertCounter = aCoder.decodeDoubleForKey("Item1")
    alertText = aCoder.decodeObjectForKey("Item2") as? String
    alertColor = aCoder.decodeObjectForKey("Item3") as? UIColor
    alertColorIndex = aCoder.decodeIntegerForKey("Item4")
}
}

该数组(当我在应用程序中添加警报数据时填充):

var alertDataSource: [alertData] = []

并对其进行编码:

let archive = NSKeyedArchiver.archivedDataWithRootObject(self.alertDataSource)
            print(archive)

并提取它:

let result = NSKeyedUnarchiver.unarchiveObjectWithData(archive)
            print(result)

预先感谢您的任何提示/建议


你不应该打电话encodeWithCoder()你自己。使用NSKeyedArchiver and NSKeyedUnarchiver. The init(coder:) and encodeWithCoder()将根据需要由归档器/解归档器调用。

放置您的NSCoding- 合规alertData实例(这实际上应该是AlertData因为类名应该是正确的大小写)放入数组(或字典,如果你愿意的话)中并执行以下操作:

let archive = NSKeyedArchiver.archivedDataWithRootObject(yourArrayOfAlertData)

在这种情况下,archive将是一个NSData实例。

Update

事实上,我想我第一次就错过了,但是你的encode...()方法不对。完全没有。考虑以下差异:

public func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeDouble(alertCounter, forKey:"Item1")
    aCoder.encodeObject(alertText, forKey:"Item2")
    aCoder.encodeObject(alertColor , forKey:"Item3")
    aCoder.encodeInteger(alertColorIndex, forKey:"Item4")
}

(还可以考虑将密钥命名为与其属性相同的名称,例如"alertCounter" for alertCounter.)

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

如何将自定义结构数组保存到 plist swift 的相关文章

随机推荐

  • 在 jquery post 中发送长字符串

    我无法在 jquery post 方法中发送长字符串 超过 96 个字符 在 FF12 和 Chrome 18 中测试 我的 servlet 是 public class TestServletAsh extends HttpServlet
  • SoftLayer API 用于了解 VLAN 中的总 IP 和可用 IP

    SoftLayer API 用于了解 VLAN 中的总 IP 和可用 IP Hello 如果我知道某个 VLAN 的总 IP 数和已用 可用 IP 可以使用哪个 APIVLAN ID 我能想到的一种方法是我可以获得 VLAN 的子网 然后在
  • (Python) ValueError:在路径中找不到程序点

    我有以下问题 我在 xUbuntu 操作系统上 我尝试在 Flask 应用程序中使用 networkx 并且我有以下代码 import networkx as nx Creating and initializing graph objec
  • ASP.NET MVC C#:查看记录详细信息时出现对象引用错误

    我是一个 NET 和 MVC 新手 在经历了 ASP 的长时间使用之后 我第一次学习它 现在是时候进行转换 让我构建 Web 应用程序的工作变得更加容易 我一直在浏览 Stephen Walther 的有用视频教程来了解大多数事情 到目前为
  • ICC 汇编输出中的所有这些数字意味着什么?

    使用 ICC 编译时 每条指令后面都是 2 个点分隔的数字 并以哈希符号为前缀 这意味着什么 例如 https gcc godbolt org g g g h codeEditor i j 1 source int testFunction
  • :nth-child(n+4):nth-child(-n+8) 如何选择一系列元素?

    根据http nthmaster com http nthmaster com 当通过 nth child 设置一系列元素的样式时 我们必须这样做 nth child n 4 nth child n 8 如果我们只使用一个 nth chil
  • 自动宽度和 100% 宽度之间的差异

    之前我的假设是width auto宽度设置为内容的宽度 现在我看到它占据了父级的整个宽度 谁能描述一下它们之间的区别吗 宽度自动 像 div 或 p 这样的块级元素的初始宽度是 auto 这使得它扩展以占据其包含块内的所有可用水平空间 如果
  • PHP函数返回NULL而不是数组[重复]

    这个问题在这里已经有答案了 我调用一个执行一些递归并且应该返回一个数组的函数 事实上 被调用函数中 return 语句之前的 var dump 就表明了该数组 然而 调用函数结果的 var dump 显示 NULL 而不是数组 这是调用函数
  • 从 Ruby、PHP 或 Cocoa 访问 Mac 应用程序

    我想通过 Ruby 访问几个不同的 Mac OS X 应用程序 但我会选择 PHP 这些应用程序是Elgato 的turbo 264 和Apple 的iTunes 两者都定义了 Applescript 库 允许我从 Applescript
  • 假冒带有 body 的 get 请求

    由于某种原因 我需要调用 GET 方法 API 并为其传递 json 请求正文 我实在找不到这样的例子 我想知道是否支持使用 feign 我怎样才能使用 feign 做到这一点 是的 Feign 支持它 您可以执行与 POST 请求相同的操
  • 在 10.9 上编译 Swift?

    直到今天下午 当我下载最终版 Xcode 6 时 我才能够在我的 10 9 机器上使用 Swift 现在我得到这个错误 OS X targets using Swift cannot be built against an SDK olde
  • 如何在 WebSphere 中管理 ClassPath

    我的 Websphere v6 1 中的 Web 模块类路径有问题 在我的 WEB INF lib 中 我有大量的 jar 文件 其中包括 xercesImpl jar 和 xmlparserv2 jar 我需要两个罐子都存在 但它们似乎相
  • 在 oracle 12 中搜索逗号分隔值

    我有一张桌子 Product在Oracle中 其中p spc cat id存储为逗号分隔值 p id p name p desc p spc cat id 1 AA AAAA 26 119 27 15 18 2 BB BBBB 0 0 27
  • 如何使用MongoDB聚合进行分页?

    我想执行一个进行基本分页的聚合查询 查找属于某个特定的所有订单company id 订单排序依据order number 统计文档总数 跳至例如文件号码100并传递其余的 将文档数量限制为例如2并将它们传递下去 最后返回计数和文档中选定的几
  • JavaScript Alert() 函数中的单引号转义

    我正在展示一些法语台词javascript alert function法国线看起来像 S il vous pla t accepter les termes et conditions avant de proc der 警报看起来像页面
  • 与 Intel 的 xchgl 等效的 ARM 指令是什么?

    I found LDREX and STREX可能是要使用的 但他们是two指令 因此不提供原子性xchgl 我想要原子交换的值是一个 32 位值 能LDREX and STREX以提供 32 位值的原子交换的方式使用 或者它们是实现它的其
  • 如何在 C 中打印日期?

    我正在尝试从 01 01 01 之类的字符串中打印日期 并得到 2001 年 1 月 1 日星期一 之类的内容 我在 ctime 的 man 中找到了一些东西 但真的不知道如何使用它 有什么帮助吗 Thanks 您可以使用strptime将
  • r 如何保留自定义类的打印方法

    我已经定义了一种使用类测试打印向量的方法 print test lt function x x lt formatC as numeric x format f big mark decimal mark digits 1 x x NA l
  • Angular $http:在“超时”配置上设置承诺

    在角 http docs http docs angularjs org api ng service 24http 它提到您可以将 超时 配置设置为数字或承诺 timeout number Promise 超时 以毫秒为单位 或承诺 解决
  • 如何将自定义结构数组保存到 plist swift

    我正在尝试将警报数据保存到 plist 它采用类alertData 的数组的形式 我能找到的所有信息都指向对其进行编码 然后将其放入数组中 但我很困惑这是做什么的 我也不知道该怎么做 这是我的游乐场 任何帮助都会很棒 类 我正在尝试保存这些