使用NSKeyedArchiver部分编码NSMutableArray

时间:2015-01-26 06:03:48

标签: ios objective-c serialization

我有 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?

1 个答案:

答案 0 :(得分:0)

您可以将Person子类化为PartialPerson,您可以归档/取消归档。

继承NSMutableArray并不是一个好主意,我认为没有理由这样做。