使用 NSKeyedArchiver 存储自定义数据模型

2024-04-24

我正在开发一个 RSS 阅读器。它只是一个表格视图,每个单元格显示一个自定义数据模型 RSSEntry。我有一个 NSMutableArray allEntries,其中包含我从服务器获得的所有 RSSEntry。这是 RSSEntry 的样子:

    @interface RSSEntry : NSObject <NSCoding> {
        NSString *_blogTitle;
        NSString *_articleTitle;
        NSString *_articleUrl;
        NSDate *_articleDate;
    }

我想从本地存档恢复数据,因此当我退出并再次打开此应用程序时,表格视图将填充上次刷新时的数据。

我读过“开始 iOS5 编程”中的示例,但它只存储和恢复一种数据模型。所以我不知道如何存储这个充满我的自定义数据模型的可变数组并恢复它。

我使用以下代码来存储和恢复数据:

// STORE
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:entry forKey:kDataKey];
[archiver finishEncoding];

// RESTORE
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath:kFilename]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
RSSEntry *entries = [unarchiver decodeObjectForKey:kDataKey];
[unarchiver finishDecoding];

我只能通过这种方式存储和恢复一种数据模型。

谁能帮帮我。我是 iOS 编程新手,可能有点乏味。抱歉。


将所有要存储的条目放入NSArray并使用此代码:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:entries];

Where entries是你的条目数组。简单又好用,只需一行代码。

要取消存档,只需使用

NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data];

NSKeyedArchiver能够归档 Objective-C 对象的任何数据结构,甚至是非常复杂的数据结构实施NSCoding协议,包括嵌套的NSArrays, NSDictionarys 和自定义对象到文件。NSKeyedUnarchiver执行相反的操作,获取由NSKeyedArchiver并重新建立已存档的原始对象图。从技术上讲,它们可能只是一个类,但苹果决定按功能将它们分开,因为这在语法上更正确或其他什么:)

我假设你能够写出结果NSData对象到一个文件,然后再次读回它。

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

使用 NSKeyedArchiver 存储自定义数据模型 的相关文章

随机推荐

  • 将 Flex ByteArray 转换为 Java byte[]

    我正在尝试将使用 rtmp 协议从 Flex GUI 发送的文件上传到服务器上 我昨天问如何在服务器上发送文件数据 通过rtmps java上传文件到服务器 https stackoverflow com questions 2310855
  • Swift 中的拖放 - 注册拖动类型时出现问题?

    背景 我正在尝试在 Swift 中进行一些简单的拖放操作 类似于 Apple 的示例代码可可拖放 https developer apple com library mac samplecode CocoaDragAndDrop Intro
  • Drupal 8自定义块(模块)创建twig模板文件

    我有一个自定义模块 它创建一个具有字段元素的自定义块 这一切都很好 但我需要为这个块设置主题 我检查了这里的其他帖子并尝试过但没有成功 我已经启用了 twig 调试并获得了主题建议 还是没有运气 谁能指出我正确的方向 这是我到目前为止所拥有
  • 使用 apply 函数重写循环

    我有以下 3 个函数 我想使其更快 我认为应用函数是最好的方法 但我从未使用过应用函数 所以我不知道该怎么做 任何类型的提示 想法和代码片段将不胜感激 n T dt 是全局参数 par 是参数向量 函数 1 是创建 m 1 n 矩阵的函数
  • 如何将 Heroku PG 转储导入本地计算机

    我正在尝试将生产 Heroku 数据库导入到我的开发机器中 我的本地数据库是 PostgreSQL 首先 我将转储从 Heroku 导出到我的机器 curl o latest dump heroku pgbackups url 然后 我尝试
  • Java 中的事件顺序

    我有两个独立组件的两个事件 但有一个问题 JTabbedPane 的 stateChanged 事件在 JFormattedField 的 focusLost 事件之前触发 有没有办法使 stateChange 事件在 focusLost
  • Qt 中浮点数的强制点而不是逗号

    我有一个非常基本的问题 如何在 Qt 中强制使用浮点数中的点而不是逗号 我的操作系统有法语版本 其他问题 是否可以显示带有千位分隔符空格的数字 尝试这个 QLocale loc QLocale system current locale l
  • WP8:使用ApplicationBar截屏

    如何使用 ApplicationBar 截屏 我使用的例子来自这个分行 https stackoverflow com questions 5553429 wp7 take screenshot from application 但通过这种
  • 方法与类型 - 第 2 部分中的另一种方法具有相同的擦除

    我完全明白这个问题方法与类型中的另一个方法具有相同的擦除 https stackoverflow com questions 1998544 method has the same erasure as another method in
  • 如何在 MySQL 中声明变量以进行普通查询?

    如何为 MySQL 中的普通查询声明变量 e g declare myVar date set myVar something select from someTable where someColumn myVar 我尝试过 语法似乎是错
  • 如何在大型光栅图像上将 Leaflet FlyTo() 与 unproject() 和 GeoJSON 数据结合使用?

    我正在使用 Leaflet 构建故事地图 使用切片为图块的大图像而不是 真实世界 地图数据 我正在使用这个插件 https commenthol github io leaflet rastercoords https commenthol
  • 如何在 Visual Studio 2010 中设置 CUDA 编译器标志?

    经过坚持不懈的得到error identifier atomicAdd is undefined 我找到了编译的解决方案 arch sm 20旗帜 但是如何在 VS 2010 中传递这个编译器标志呢 我已经尝试过如下Project gt P
  • SQL Server:使用数字文字进行计算

    我用浮点计算做了一些测试 以尽量减少精度损失 我偶然发现了一个现象 我想在这里展示并希望得到解释 当我写作时 print 1 0 1 0 60 0 结果是 60 0024000960 当我编写相同的公式并进行显式转换时float print
  • 管理 2 个以上具有依赖关系的 Nodejs 包的开发

    我正在开发 2 个 node js 包 每个包都在自己的 git 存储库中管理 包裹B取决于套餐A 所以我的本地目录结构如下所示 A1 B node modules A2 如果我更改本地代码A1 我想测试一下B在将其推送到公共存储库之前 我
  • AddressBook:区分 kABSourceTypeExchangeGAL 类型的源

    我要问的问题已经在这个网站上被问过很多次了 到以前的线程的链接在我的问题下面 使用 iOS AddressBook 并尝试获取 Exchange GAL 地址簿时 类型名称返回 Nil 我使用的代码 并在之前的所有线程中建议 是 CFStr
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 后台无限 While True 循环 (Python)

    基本上 我有一些这样的代码 while True number int len oilrigs 49 number money time sleep 1 在此之前我有一个启动屏幕 然而 由于这个 while true 循环 它会阻止它运行实
  • 某些方法上的 WCF REST 基本身份验证

    我在 WCF 4 0 中实现了很多 RESTful GET 和 POST 方法 所有这些都通过 SSL 进行 一些方法的示例 OperationContract WebInvoke UriTemplate Login Method POST
  • scikit加权f1分数计算及使用

    我有一个关于weightedsklearn metrics f1 score 中的平均值 sklearn metrics f1 score y true y pred labels None pos label 1 average weig
  • 使用 NSKeyedArchiver 存储自定义数据模型

    我正在开发一个 RSS 阅读器 它只是一个表格视图 每个单元格显示一个自定义数据模型 RSSEntry 我有一个 NSMutableArray allEntries 其中包含我从服务器获得的所有 RSSEntry 这是 RSSEntry 的