ios - 如何编码/解码具有自定义对象数组的自定义对象?

标签 ios objective-c nsdictionary nscoding

我有一个自定义对象,它有一个 property 和另一组自定义 NSDictionary 对象的 NSArray。当我对数组进行编码和解码时,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;
}

最佳答案

子类化 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;
}

关于ios - 如何编码/解码具有自定义对象数组的自定义对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265277/

相关文章:

java - 在一个语句中一次向 HashMap 添加多个条目

ios - Objective-C : Application crashing while converting NSDictionary to JSON

iphone - XCode 5 Storyboard内部不一致

objective-c - 激活字体时参数错误

ios - NSOperationQueue currentQueue 不工作

ios - 类型 'String' 不符合协议(protocol) 'NSCopying' 向下转换 AnyObject 到 String 时出错

objective-c - 在 ios 中构建缩略图条纹

ios - Sinch Integration in swift 项目

ios - 无法将字符串转换为仅限 iOS 13.3 的 NSDate

iPhone - URL 表的最佳方法?