Я использовал следующий пример:NSKeyedUnarchiver не вызывает initWithCoder
game state singleton cocos2d, initWithEncoder always returns null
Вместо того, чтобы использовать файл, я использую объект NSData я получаю от NSUserDefaults. Он не является нулевым, а скорее имеет в нем данные, которые, я считаю, являются правильно закодированными данными, и по какой-то причине, когда я запускаю unarchiveObjectWithData, он не вызывает initWithCoder, поскольку я помещал NSLog в первую строку.
Идеи?
+ (void)loadState {
@synchronized([AppStateManager class]) {
if (!sharedAppStateManager) {
[AppStateManager sharedManager];
}
NSUserDefaults *udefs = [NSUserDefaults standardUserDefaults];
NSData *archivedData = [udefs objectForKey:@"AppState"];
NSLog(@"going to unarchive");
[NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
NSLog(@"unarchive complete");
}
}
- (id)initWithCoder:(NSCoder *)decoder {
NSLog(@"init coder");
self = [super init];
if (self != nil) {
[self setUsername:[decoder decodeObjectWithKey:@"username"]];
}
return self;
}
Создает ли исключающее исключение unarchiver? Если нет, возвращает ли он объект? Если он возвращает объект, какой класс он? –