我有 Person 类,它实现了 NSCoding 协议:
@interface Person : NSObject <NSCoding>
@property NSString *name;
@property float salary;
@end
@implementation Person
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeFloat:_salary forKey:@"salary"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if(self=[super init])
{
_name =[aDecoder decodeObjectForKey:@"name"];
_salary=[aDecoder decodeFloatForKey:@"salary"];
}
return self;
}
我还有一个人的数组,我想序列化。但不是所有的实体。我想部分保存它。我决定创建自己的 NSMutableArray 子类,它将实现 NSCoding 协议,并且它自己的 encodeWithCoder 和 initWithCoder 方法:
@interface customNSMutableArray : NSMutableArray<NSCoding>
@end
@implementation customNSMutableArray
-(void)encodeWithCoder:(NSCoder *)aCoder
{
for(NSObject * obj in self)
{
//if(some_condition)
[aCoder encodeObject:obj];
}
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
//@todo
return self;
}
@end
这是一个麻烦。在尝试编码 customNSMutableArray 之后:
@property customNSMutableArray *companyStaff;
...
NSData * data=[NSKeyedArchiver archivedDataWithRootObject:_companyStaff];
我的 customNSMutableArray 中的 encodeWithCoder 方法未被调用。 它直接传递给数组中 Person 实体的 encodeWithCoder 。
如何部分序列化NSMutableArray?
答案 0 :(得分:0)
您可以将Person
子类化为PartialPerson
,您可以归档/取消归档。
继承NSMutableArray并不是一个好主意,我认为没有理由这样做。