Хранение полного объекта класса в базе данных в iPhone - PullRequest
0 голосов
/ 08 марта 2012

Я новичок в этой разработке.

Я хочу сохранить полный объект класса в моей базе данных.На самом деле я создаю приложение, в котором пользователь может добавить несколько представлений в родительское представление и хочет сохранить его, чтобы в следующий раз, когда пользователь получит его, он получил то, что когда-либо сохранял, т.е. просмотры в родительское представление ранее.

Любая логика или предложение на том же самом действительно будут полезны,

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Любой объект, который вы хотите сохранить, должен соответствовать протоколу 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]
1 голос
/ 08 марта 2012

Вы должны выбрать между NSCoding и Core Data в зависимости от ваших конкретных потребностей.См. Этот пост для получения дополнительной информации: NSCoding VS Core data

0 голосов
/ 08 марта 2012

Вы можете хранить состояние (значение любых атрибутов) любого объекта в базе данных. Вы должны использовать NSCoding. Пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...