将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么?

2024-02-05

我有一个名为 Occasion 的自定义对象,定义如下:

#import <Foundation/Foundation.h>


@interface Occasion : NSObject {

NSString *_title;
NSDate *_date;
NSString *_imagePath;    

}

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSDate *date;
@property (nonatomic, retain) NSString *imagePath;

现在我有一个 NSMutableArray of Occasions,我想将其保存到 NSUserDefaults 中。我知道这是不可能的,所以我想知道哪种方法最简单?如果序列化是答案,那么如何实现呢?因为我阅读了文档但无法完全理解它的工作方式。


你应该使用类似的东西NSKeyedArchiver将数组序列化为NSData,将其保存到NSUserDefaults然后使用NSKeyedUnarchiver稍后反序列化它:

NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];

//...

NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];

您将需要实施NSCoding协议在你的Occasion类并正确保存各种属性以使其正常工作。欲了解更多信息,请参阅档案和序列化编程指南 http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Archiving/Archiving.html。执行此操作不应超过几行代码。就像是:

- (void)encodeWithCoder:(NSCoder *)coder {
    [super encodeWithCoder:coder];

    [coder encodeObject:_title forKey:@"_title"];
    [coder encodeObject:_date forKey:@"_date"];
    [coder encodeObject:_imagePath forKey:@"_imagePath"];
}

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];

    _title = [[coder decodeObjectForKey:@"_title"] retain];
    _date = [[coder decodeObjectForKey:@"_date"] retain];
    _imagePath = [[coder decodeObjectForKey:@"_imagePath"] retain];

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

将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么? 的相关文章

随机推荐

  • PHP GET 请求,发送标头

    我需要执行获取请求并随之发送标头 我可以用什么来做到这一点 我需要设置的主要标头是浏览器标头 是否有捷径可寻 如果您使用 cURL 则可以使用curl setopt handle CURLOPT USERAGENT browser desc
  • Spring - 多种配置和@CompontentScan顺序

    我有多个Spring Configuration定义 bean 的类 我运行应用程序的主类有 SpringBootApplication scanBasePackageClasses BasePackage class 我的问题是 扫描这些
  • 什么是匹配不带子域的有效域名的正则表达式?

    我需要验证域名 谷歌网站 stackoverflow com 因此 一个最原始形式的域名 甚至不是像 www 这样的子域名 字符应该只是a z A Z 0 9 and period and dash 域名部分不应以破折号 开头或结尾 例如
  • 删除掩模图像中不需要的部分

    我使用 U2NET 成功计算了图像的掩模 如下所示 然而 正如我们所看到的 面具是not内部完全白色 并且在掩模外部 即左侧部分 也可以观察到一些不需要的伪影 我正在尝试使用膨胀和腐蚀操作来解决上述两个问题 但我认为这是错误的方法 因为它不
  • NHibernate 会话的生命周期应该是多长?

    我是 NHibernate 的新手 在过早关闭会话时遇到了一些问题 我通过重用会话而不是为每个事务打开一个会话来暂时解决了这个问题 然而 我的印象是 每次需要时打开会话是会话生命周期管理的推荐方法 不 所以 处理会话的推荐方法是什么 他们的
  • BSON |终端和非终端

    阅读通过BSON规范 http bsonspec org specification我遇到了terminal and 非终结符其中的条款 例如 有效的BSON数据由文档表示非终结符 以下基本类型用作终端在语法的其余部分 BSON 规范中的
  • 使用程序集版本控制属性的最佳方法是什么?

    The 汇编版本 http msdn microsoft com en us library system reflection assemblyversionattribute aspx and 程序集文件版本 http msdn mic
  • 如何向/使用 RESTful WCF 服务传递和使用 JSON 参数?

    我是 RESTful 服务的初学者 我需要创建一个接口 客户端需要在其中传递最多 9 个参数 我更喜欢将参数作为 JSON 对象传递 例如 如果我的 JSON 是 age 100 name foo messages msg 1 msg 2
  • 将朝鲜文音节分解为字母 (jamo)

    我正在开发一个处理韩语句子的程序 我需要一种方法将音节或块分解为其字母 对于那些不懂韩文的人来说 一个音节由 2 4 个字母 jamo 组成 可以创建数千种不同的组合 我想做的就是将这些音节分解成构成它的字母 我能够通过将其 Unicode
  • 在 Virtuoso 中定义端点

    如何在 Virtuoso 中为我的本体定义新端点 我能够通过 Virtuoso Conductor 的 RDF Store Upload 选项卡上传我的本体 现在我需要定义一组端点 以便能够通过 HTTP 在我的应用程序中使用它们 Virt
  • pandas 中的旋转问题(在 R 中传播)

    我在使用 pandas 中的 pd pivot 或 hub table 函数时遇到一些问题 我有这个 df pd DataFrame site id 0 a 1 a 2 b 3 b 4 c 5 c 6 a 7 a 8 b 9 b 10 c
  • Qt moc.exe 不生成 *.moc 文件

    我正在尝试建立qtestlib tutorial1 示例 但是testqstring moc当我运行时没有生成文件nmake 我在 Windows XP SP3 上运行 Qt 4 5 2 我复制了测试qstring cpp从教程目录到我的构
  • XSRF - 如何设置跨域 cookie

    我开发了 REST API 和两个 JavaScript 客户端 单页应用程序和本机应用程序 基于电子 在这两个客户端中 我的用户都通过 OAuth2 流程进行身份验证 将用户密码发送到服务器 获取访问令牌 以纯文本形式 和刷新令牌 以 h
  • 仅将边框添加到换行文本的底部

    我试图在一些换行文本上实现下划线 该下划线适合底行文本的宽度 同时仅出现在该底线下方 图1说明了期望的效果 Figure 1 使用这个 HTML h2 span class inline block optatur volendit inu
  • 加载TextureAtlas的状态

    我在基于 LibGdx 的游戏中使用TextureAtlas 随着图集大小的增加 加载时间也会增加 因此显示我在游戏中设置的动画会出现延迟 因此我希望获得纹理图集加载过程的状态 1 无论如何要获得状态吗 2 有听众吗 您可以以已使用此方法加
  • 如何在 swift ios 中刷新选项卡栏项目

    我做的应用程序就像Instagram与选项卡栏项目 在应用程序中我有simple user and company user 我有主视图控制器 MainTabBarController UITabBarController 有 5 个选项卡
  • 当从 super() 运行方法时,为什么字段不初始化为非默认值?

    我一定花了一个多小时试图找出一些意外行为的原因 我最终意识到字段没有按我的预期设置 在耸耸肩并继续之前 我想了解为什么会这样 在运行下面的示例时 我希望输出为 true 但它是 false 其他测试表明我总是得到该类型的默认值 public
  • 获取 OAuth 会话的过期时间

    为了授予或撤销对我的 webapi 的访问权限 我使用 OAuth 密码和令牌刷新工作流程 如果我理解正确的话 工作流程应该是这样的 使用用户名 密码 客户端 ID 进行身份验证 检索 accesstoken refreshtoken 和到
  • Swift:如何请求带有自签名证书的 URL?

    我正在打开 SSL 连接以在 Swift 中检索 JSON 但正在使用自签名证书对我自己的服务器进行测试 以下是 URL 请求的片段 var urlPath https myhost com get json var url NSURL N
  • 将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么?

    我有一个名为 Occasion 的自定义对象 定义如下 import