Архивирование объекта UIView, который содержит UIImageView и UIImage как его подвид в Objective-C - PullRequest
1 голос
/ 04 января 2012

Как мне заархивировать UIVIew, который имеет UIImagView и UIImage как его подвид.Я пытался сделать это таким образом,

data= [NSKeyedArchiver archivedDataWithRootObject: viewObject];
new_ViewObject= [NSKeyedUnarchiver unarchiveObjectWithData: data];

Но программа вылетает, сообщая, что [UIImage encodeWithCoder:]: нераспознанный селектор отправлен на экземпляр.

Как мне решить эту проблему?Как я могу заархивировать и разархивировать этот объект UIView в Objective-C?

Спасибо.

1 Ответ

3 голосов
/ 04 января 2012

UIView реализует протокол NSCoding, поэтому вы можете использовать encodeWithCoder: для получения сериализованного представления и initWithCoder: для восстановления UIView из такого представления. Вы можете найти много подробностей в Руководстве по программированию сериализации для какао .

Вот краткий пример того, как это сделать:

- (NSData *)dataForView:(UIView *)view {
  NSMutableData *data = [NSMutableData data];
  NSKeyedArchiver  *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
  [archiver encodeObject:view forKey:@"view"];
  [archiver finishEncoding];
  [archiver release];

  return (id)data;
}

- (UIView *)viewForData:(NSData *)data {
  NSKeyedArchiver  *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

   UIView *view = [unarchiver decodeObjectForKey:@"view"];
  [unarchiver finishDecoding];
  [unarchiver release];

  return view;
}

Обратите внимание, что если я на самом деле использую пользовательский подкласс UIView, вам нужно переопределить encodeWithCoder: и initWithCoder: чтобы добавить свои собственные свойства

...