之前项目中使用到了归档的技术,也用到了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;
}
#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方法
否则负类中的属性就无法被归档