Чтобы не забыть, как я это сделала, и может кому будет тоже интересно и полезно.
Для этого нужен протокол NSCoding и класс NSUserDefaults.
Класс, объекты которого хочу сохранять между запусками моего приложения, должен реализовывать протокол NSCoding:
Для этого нужен протокол NSCoding и класс NSUserDefaults.
Класс, объекты которого хочу сохранять между запусками моего приложения, должен реализовывать протокол NSCoding:
@interface Card : NSObject <NSCoding>
@property (nonatomic) int color;
@property (nonatomic) int shading;
@property (strong, nonatomic) NSString *symbol;
@property (nonatomic) int number;
@end
@implementation Card
#define COLOR_KEY @"color"
#define SHADING_KEY @"shading"
#define SYMBOL_KEY @"symbol"
#define NUMBER_KEY @"number"
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if(self) {
self.color = [decoder decodeIntForKey:COLOR_KEY];
self.shading = [decoder decodeIntForKey:SHADING_KEY];
self.symbol = [decoder decodeObjectForKey:SYMBOL_KEY];
self.number = [decoder decodeIntForKey:NUMBER_KEY];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeInt:self.color forKey:COLOR_KEY];
[encoder encodeInt:self.shading forKey:SHADING_KEY];
[encoder encodeInt:self.number forKey:NUMBER_KEY];
[encoder encodeObject:self.symbol forKey:SYMBOL_KEY];
}
@end
#define SAVED_CARD @"saved card"
-(Card *)read
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *archivedObject = [defaults objectForKey: SAVED_CARD];
Card *card = (Card *)[NSKeyedUnarchiver unarchiveObjectWithData:archivedObject];
return card;
}
-(void)write:(Card *)card
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *archivedObject = [NSKeyedArchiver archivedDataWithRootObject:card];
[defaults setValue:archivedObject forKey:ACTIVE_CARDS];
}
Objective C. iOS. Сохранение объектов произвольных классов между запусками приложения