我有一个自定义对象,其中包含另一组自定义property
对象的NSArray
和NSDictionary
。当我对数组进行编码和解码时,NSDictionary
个对象在它们应该具有值时是空的。我读过的所有内容都说NSArray
个对象符合NSCoding
,但我觉得必须要做的更多事情才能正确编码NSDictionary
NSArray
内的@interface Game : NSObject <NSMutableCopying, NSCoding>
@property int rows;
@property int cols;
@property NSMutableArray *troughs;
- (void)encodeWithCoder:(NSCoder *)encoder {
// encoding properties
[encoder encodeInteger:rows forKey:@"rows"];
[encoder encodeInteger:cols forKey:@"cols"];
[encoder encodeObject:troughs forKey:@"troughs"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
rows = (int)[coder decodeIntegerForKey:@"rows"];
cols = (int)[coder decodeIntegerForKey:@"cols"];
troughs = [coder decodeObjectForKey:@"troughs"];
}
return self;
}
个对象......我错过了什么?
@interface Trough : NSDictionary <NSMutableCopying, NSCoding>
@property int col;
@property int row;
@property BOOL isLocked;
@property NSMutableArray *tokens;
- (void)encodeWithCoder:(NSCoder *)encoder {
// encoding properties
[encoder encodeInteger:col forKey:@"col"];
[encoder encodeInteger:row forKey:@"row"];
[encoder encodeBool:isLocked forKey:@"isLocked"];
[encoder encodeObject:tokens forKey:@"tokens"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
col = (int)[coder decodeIntegerForKey:@"col"];
row = (int)[coder decodeIntegerForKey:@"row"];
isLocked = [coder decodeBoolForKey:@"isLocked"];
tokens = [coder decodeObjectForKey:@"tokens"];
}
return self;
}
槽数组包含定义为:
的对象{{1}}
答案 0 :(得分:1)
继承NSDictionary非常不寻常。如果那些NSCopying实现有任何工作机会,他们也需要调用继承的行为。
- (void)encodeWithCoder:(NSCoder *)aCoder {
[super encodeWithCoder:aCoder];
// encode your Trough properties
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// decode your trough properties
}
return self;
}