Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义类对象的NSMutableArray的序列化和反序列化_Ios_Objective C - Fatal编程技术网

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

Ios 自定义类对象的NSMutableArray的序列化和反序列化,ios,objective-c,Ios,Objective C,平台:XCode5 语文:目标C 项目:iOS应用程序 我基本上来自Java和C#背景,这是我的第一个iOS应用程序,我感觉受到严重限制 我正在开发一个需要存储用户数据的应用程序。 大约有10个数据模型类,其中一些类具有自定义类型的属性。 在应用程序使用寿命期间,所有型号的记录总数将少于1000。 基本上,在任何一个日期,每个日期模型只能生成一个对象。 除了“为日期d显示数据模型类型X的一条记录”这样的基本查询之外,对保存的数据不会有太多查询 我正在考虑使用一种简单的方法,将每个数据模型的记录序

平台:XCode5 语文:目标C 项目:iOS应用程序

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

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

我正在考虑使用一种简单的方法,将每个数据模型的记录序列化到一个简单的文本文件或使用序列化的东西中。因此,每当创建一条新记录时,它都会被序列化并写入一个包含以前这类记录的文件中

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

现在,问题是: 1.考虑到我上面解释的场景,这里序列化/反序列化的最佳方式是什么。我读过关于属性列表和NScoding协议的内容。我倾向于使用NSCoding协议。这是正确的方法吗

  • 我了解到我需要实现initWithCoder函数,其中所有需要序列化的属性都将被称为键/值对。如果某些属性为自定义类型,我将在此处执行什么操作?例如,对于名为“room”的类,名为length的属性类型为“distance”,其中“distance”是一个具有两个整型属性(英尺和英寸)的类。是的,这个远距离房间的事情只是一个例子来理解我的问题的解决方案

  • 关于自定义类型的序列化/反序列化对象以及自定义类型的某些属性的更多详细信息,我们将不胜感激


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

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

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

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

    很抱歉给你一个简短的答案,但是:使用CoreDataNo,这确实是一个完美的答案。只是由于时间限制的原因(为了在2天内准备好测试模拟向潜在投资者展示),我倾向于避免本周的核心数据学习曲线。感谢您重申我的观点,下周我将需要完全重新编写生产就绪的应用程序,核心数据将是其中的一大部分。:)