ios中 继承对象模型的归档实现

之前项目中使用到了归档的技术,也用到了MJExtension

但是问题是,这个公共库遇到了无法归档的一些问题,让人蛋疼不已,怎么办呢。

对于不能归档的部分,职能手动归档,很是无语。

查找了一下原因:

原来对于两个模型,如何A继承了B,那么A有很大的情况是无法归档的!

自己写了。

对于上述的A模型和B模来说,定义如下:

#import <Foundation/Foundation.h>
#import "Student.h"

@interface Coder : NSObject

@property (nonatomic,copy) NSString *text;
@property (nonatomic,copy) NSString *userName;
@property (nonatomic,copy) NSString *classId;
@property (nonatomic,strong) Student *stu;

@end

它的归档要写成如下形式:

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_classId forKey:@"classId"];
    [aCoder encodeObject:_userName forKey:@"userName"];
    [aCoder encodeObject:_text forKey:@"text"];
    [aCoder encodeObject:_stu forKey:@"stu"];

}

- (id)initWithCoder:(NSCoder *)aDecoder // NS_DESIGNATED_INITIALIZER
{
    _classId = [aDecoder decodeObjectForKey:@"classId"];
    _userName = [aDecoder decodeObjectForKey:@"userName"];
    _text = [aDecoder decodeObjectForKey:@"text"];
    _stu = [aDecoder decodeObjectForKey:@"stu"];

    return self;
}

B模型定义如下:

#import "Coder.h"

@interface CoderChild : Coder

@property (nonatomic, strong) NSString *king;
@property (nonatomic, strong) NSString *father;
@end

它的归档则要写成如下的形式:

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [super encodeWithCoder:aCoder];
    [aCoder encodeObject:_king forKey:@"king"];
    [aCoder encodeObject:_father forKey:@"father"];
}

- (id)initWithCoder:(NSCoder *)aDecoder // NS_DESIGNATED_INITIALIZER
{
    unsigned int count = 0;
    self = [super initWithCoder:aDecoder];
    if (self) {
        _king = [aDecoder decodeObjectForKey:@"king"];
        _father = [aDecoder decodeObjectForKey:@"father"];
    }
    return self;
}

以上两个类,子类要调用父类的 initwithCoder方法

否则负类中的属性就无法被归档

时间: 2024-07-28 20:12:47

ios中 继承对象模型的归档实现的相关文章

IOS中利用NSKeyedArchiver进行数据的归档和恢复

1.相关知识点: <1> 可以利用NSKeyedArchiver 进行归档和恢复的对象类型:NSString .NSDictionary.NSArray.NSData.                        NSNumber等 <2> 使用是必须遵循NSCoding协议对象,实现两个方法: encodeWithCoder:归档对象时,将会调用该方法. initWithCoder:每次从文件中恢复对象时,调用该方法. 2.简单例子阐述详细步骤 <1> 创建一个学生

IOS中将对象属性列表归档成一个plist文件中

归档步骤: 1.将一个NSDictionary对象归档到一个plist属性列表中 <1> 首先要将数据封装成字典: NSMutableDictionary * dict = [NSMutableDctionary dictionary]; [dict setObject:@"烟灰" forKey:@"name"]; [dict setObject:@"1234567" forKey:@"phoneNumber"];

iOS中几种数据持久化方案

概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 沙盒 在介绍各种存储方法之前,有必要说明以下沙盒机制.iOS程序默认情况下只能访问程序自己的目录,这个目录被称为"沙盒". 1.结构 既然沙盒就是一个文件夹,那就看看里面有什么吧

iOS中几种常用的数据存储方式

自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据全部存放在一个属性列表文件(*.plist文件)中, 具体步骤大致如下: 第一步:获得文件即将保存的路径: NSArray*documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,Y

OS开发UI篇—ios应用数据存储方式(归档)

OS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 02

iOS中几种数据持久化方案总结

概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 沙盒 在介绍各种存储方法之前,有必要说明以下沙盒机制.iOS程序默认情况下只能访问程序自己的目录,这个目录被称为"沙盒". 1.结构 既然沙盒就是一个文件夹,那就看看里面有什么吧

iOS开发UI篇—ios应用数据存储方式(归档)

iOS开发UI篇-ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 0

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

iOS中几种数据持久化方案:我要永远地记住你!

作者:@翁呀伟呀 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 沙盒 在介绍各种存储方法之前,有必要说明以下沙盒机制.iOS程序默认情况下只能访问程序自己的目录,这个目录被称为“沙盒”. 1.结构 既然沙盒就是一个文件夹,那就看看里面