NSCoder不与NSArray合作

时间:2014-09-21 18:15:13

标签: objective-c nscoding nscoder

我正在尝试为我创建的自定义对象实现NSCoder方法encodeWithCoder和initWithCoder,该对象具有自定义对象的子数组。两个自定义对象都采用上述方法,但在顶级对象被解码后,数组的值总是为零。

两个对象都实现了下面的方法,字典和数组,或者来自库的流行,我用它来获取字段名称并将对象转换为字典。我检查过在Array上调用encodeObject,此时数组不是nil。我同样检查了解码方法在另一端收到nil ..

我无法解决我出错的地方?我是正确的假设只要子数组对象实现协议我应该这样做吗?

- (void)encodeWithCoder:(NSCoder *)aCoder{
    NSDictionary* dictionary = [jrModelBinder unBind:self];
    for(NSString* field in dictionary)
    {
        id val = [self valueForKey:field];
        [aCoder encodeObject:val forKey:field];
    }
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    if(self = [super init]){
        NSArray* fields = [jrModelBinder propertyNames:self];
        for(NSString* field in fields)
        {
            id val = [aDecoder decodeObjectForKey:field];
            [self setValue:val  forKey:field];
        }
    }
    return self;
}

1 个答案:

答案 0 :(得分:0)

我之前误解了你的问题:

NSKeyedArchiver / Unarchiver应该编码和解码NSArrays和NSDictionaries没有问题。

但我认为,因为你的数组本身包含实现2个以下函数的自定义对象:

- (id)initWithCoder:(NSCoder *)aDecoder
- (void)encodeWithCoder:(NSCoder *)enCoder

尝试在下面使用数组

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

还使用NSKeyedUnarchiver进行解码。