OGeek|极客世界-中国程序员成长平台

标题: ios - 自定义类对象的 NSMutableArray 的序列化和反序列化 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 10:06
标题: ios - 自定义类对象的 NSMutableArray 的序列化和反序列化

平台: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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4