【发布时间】:2014-09-21 18:15:13
【问题描述】:
我正在尝试为我创建的具有自定义对象子数组的自定义对象实现 NSCoder 方法 encodeWithCoder 和 initWithCoder。两个自定义对象都使用上述方法,但在顶级对象被解码后,数组的值始终为 nil。
这两个对象都实现了以下方法,字典和数组,或者从我拥有的用于获取字段名称并将对象转换为字典的库中流行的方法。我检查了在数组上调用了 encodeObject ,此时数组不是零。我同样检查了解码方法在另一边收到 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;
}
【问题讨论】:
-
别忘了在
initWithCoder中致电[super initWithCoder:]。 -
NSObject 没有实现 initWithCoder?
-
您的问题中没有指定
-
请用
decodeWithCoder:的实现来更新您的问题。 -
我没有实现decodeWithCoder,好像不是NSCoder协议的一部分?
标签: objective-c nscoding nscoder