У меня есть объект NSDateИспользование NSKeyedArchiver для сохранения объекта NSDate
NSDate* time = [NSDate date];
Я пытаюсь сохранить его с помощью NSKeyedArchiver, используя следующие
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveFile = [[paths objectAtIndex:0] stringByAppendingPathComponent: @"GameData.dat"];
NSMutableData *gameData = [NSMutableData data];
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData: gameData];
[encoder encodeObject: time forKey: @"time"];
[encoder finishEncoding];
[gameData writeToFile:saveFile atomically:YES];
И я загрузить его, используя следующие
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *file = [[paths objectAtIndex:0] stringByAppendingPathComponent: @"GameData.dat"];
Boolean saveFileExists = [[NSFileManager defaultManager] fileExistsAtPath:file];
NSMutableData *gameData = [NSData dataWithContentsOfFile:file];
NSKeyedUnarchiver *decoder [[NSKeyedUnarchiver alloc] initForReadingWithData:gameData];
time = [decoder decodeObjectForKey: @"time"];
Этот метод отлично работает для всех типов данных не объектов, но он всегда возвращает ноль для объектов. Я прочитал документацию Apple для NSKeyedArchiver, и похоже, что я должен делать все правильно, но, как всегда, я, вероятно, не вижу ничего очевидного. Любая помощь будет оценена по достоинству.
перед написанием do 'assert (gameData.length)' и после прочтения данных тоже - посмотрите, есть ли данные в порядке –
Side Note - метод 'fileExistsAtPath:' имеет тип возврата 'BOOL', а не' Boolean'. – rmaddy
Не забудьте вызвать 'finishDecoding', когда закончите декодирование. – rmaddy