Любой объект, который вы хотите сохранить, должен соответствовать протоколу NSCoder.Имейте в виду, что если у вас есть собственные объекты в родительском объекте, они должны соответствовать NSCoder.Добавьте следующие методы в ваш пользовательский класс (ы).
- (id)initWithCoder:(NSCoder *)coder {
_inventory = [[coder decodeObjectForKey:@"inventory"] retain];
return self;
}
- (void)encodeWithCoder:(NSCoder *) encoder{
[encoder encodeObject:_inventory forKey:@"inventory"];
}
В приведенном выше примере я хочу закодировать инвентарь игрока.Если инвентарь содержит пользовательские объекты (в отличие, например, от набора строк NSStrings), им также понадобятся свои собственные методы NSCoder.
Ниже я превращаю его в нечто, что вы можете сохранить в NSUserDefaults.Настройте соответствующим образом для хранения в БД.Имейте в виду, что если вы хотите отправить NSData по проводам для хранения в БД, вам нужно преобразовать их в Base64 и, возможно, сжать.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData * encodedObject = [NSKeyedArchiver archivedDataWithRootObject:rootObject];
[defaults setObject:encodedObject forKey:kSaveArchiveKey];
[defaults synchronize];
Чтобы пойти другим путем, вы захотите захватить ваши NSData, сделать с ним любую магию, как я описал выше (base64, сжатие) и разархивировать.
PlayerInventory *inventory = [NSKeyedUnarchiver unarchiveObjectWithData:playerInventoryData]