• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 自定义类对象的 NSMutableArray 的序列化和反序列化

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:06:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

平台:XCode5 语言: objective-c 项目:一个 iOS 应用程序

我基本上来自 Java 和 C# 背景,这是我的第一个 iOS 应用程序,我感觉受到严重限制。

我正在开发一个需要存储用户数据的应用程序。 大约有 10 个数据模型类,其中一些类具有自定义类型的属性。 在应用程序使用期限内,所有模型的记录总数将少于 1000。 基本上,在任何单个日期,每个日期模型只能生成 1 个对象。 除了“为日期 d 显示一条数据模型类型 X 的记录”之类的基本查询外,不会对已保存的数据进行太多查询。

我正在考虑使用一种简单的方法,将每个数据模型的记录序列化为一个简单的文本文件或使用序列化的东西。因此,每当创建新记录时,都会对其进行序列化并写入包含先前此类记录的文件。

我知道我必须将文件中的所有现有记录反序列化为 NSMutableArray,添加新记录,然后将新的 NSMutableArray 序列化回来。 我更愿意使用泛型或 NSMutableObject 创建一个具有静态函数的类。

现在,问题是: 1.考虑到我上面解释的场景,这里序列化/反序列化的最佳方法是什么。我已阅读有关属性列表和 NScoding 协议(protocol)的信息。我倾向于使用 NSCoding 协议(protocol)。这会是正确的方法吗?

  1. 我读到我需要实现 initWithCoder 函数,其中所有需要序列化的属性都将被称为键/值对。如果某些属性是自定义类型,我会在这里做什么?例如,名为“房间”的类的“距离”类型的长度属性,其中“距离”是具有 2 个整数类型属性的类 - 英尺和英寸。是的,这个距离房间的事情只是理解我的问题解决方案的一个例子。

  2. 如果再提供有关自定义类型的序列化/反序列化对象以及自定义类型的某些属性的更多详细信息,我们将不胜感激。



Best Answer-推荐答案


在 iOS 中将某些内容序列化为 NSData 的最简单方法是使用 NSKeyedArchiver/NSKeyedUnarchiver。 对于自定义对象,您需要实现 NSCoding 协议(protocol)。

请注意,您存储在数组中的对象也必须支持 NSCoding。

但是,在反序列化时,代替 NSMutableArray 对象,您将收到不可变的 NSArray 对象。要获得可变实例,您必须制作

- (id)initWithCoderNSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        myMutableArray = [NSMutableArray arrayWithArray:[aDecoder decodeObjectForKey"myMutableArray"]];
    }
    return self;
}

关于ios - 自定义类对象的 NSMutableArray 的序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856576/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap