0

LevelContentいくつかのプロパティを含むカスタム オブジェクトがあります。LevelContentに準拠し、およびメソッドNSCodingを実装しました。データを保存して Parse.com にフェッチします。保存は次のようにうまくいきます: encodeWithCoder:initWithCoder:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.currentLevelContent];

データをフェッチすると、NSData正しく取得されますLevelContentが、ダウンロードしたデータで初期化しようとすると、initWithCoder:呼び出されません。私はこれをロードしようとしますLevelContent:

LevelContent *content = [NSKeyedUnarchiver unarchiveObjectWithData:data];

エンコード/デコードのコードは次のとおりです

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.tiles forKey:@"tiles"];
    [aCoder encodeObject:self.attributes forKey:@"attributes"];
    [aCoder encodeObject:self.level forKey:@"level"];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self == [super init]) {
        self.tiles = [NSMutableArray array];
        [self.tiles addObjectsFromArray:[aDecoder decodeObjectForKey:@"tiles"]];
        self.attributes = [NSMutableDictionary dictionary];
        [self.attributes addEntriesFromDictionary:[aDecoder decodeObjectForKey:@"attributes"]];
        self.level = [Level levelWithTopIndex:0 detailIndex:0];
        self.level = [aDecoder decodeObjectForKey:@"level"];
    }
    return self;
}
4

1 に答える 1

1

に変更if (self == [super init])_if (self = [super init])initWithCoder:

これを試して、

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        .....
    }
    return self;
}
于 2014-06-26T07:48:57.713 に答える