Вы не совсем понимаете рабочий процесс кодера / декодера.
Правильно используя методы encodeObjectForKey:
и decodeObjectForKey:
, вы должны передать в качестве аргумента ключ , который следует использовать для хранения значения. Этот ключ должен оставаться постоянным.
Вы также не должны требовать от вызывающих абонентов предоставлять ключ, используемый вашим Coin
объектом для хранения данных. Возьмите этот простой пример как более правильный / эффективный метод (при условии, что я понимаю цель вашего класса):
// Class Coins.h
@property (assign) int numberOfCoins;
// Класс Coins.m
#define NUM_COINS_KEY @"NUM_COINS_KEY"
@synthesize numberOfCoins;
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) { // Use [super initWithCoder:decoder] here if your superclass supports it
self.numberOfCoins = [decoder decodeIntForKey:NUM_COINS_KEY];
NSLog(@"Decoded Coins: %d", self.numberOfCoins);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
NSLog(@"Encoded keyName: %@", keyName);
[encoder encodeInt:self.numberOfCoins forKey:NUM_COINS_KEY];
}
// Класс main
Coins *coin = [[Coins alloc] init];
coin.numberOfCoins = 6;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:coin];
[coin release]; // If you're just playing around, this is probably overkill, but a good habit
coin = [NSKeyedUnarchiver unarchiveObjectWithData:data];