У меня проблемы с архивированием NSMutableSet с циклическими ссылками - PullRequest
1 голос
/ 27 марта 2011

У меня проблемы с разархивированием объекта NSMutableSet в приложении для iPhone (iOS 4.3).

У меня есть подпредставление UIImageView, которое содержит ивар типа NSMutableSet. Я определил NSMutableSet в заголовке (и синтезировал его в реализации):

@interface MyView : UIImageView
{   
  NSMutableSet *group;
}

@property (nonatomic, retain) NSMutableSet *group;

Набор содержит ссылки на ноль или более объектов типа MyView. Так как группа является атрибутом MyView, ссылки на элементы группы, отличные от nil (объекты MyView), являются круглыми.

Я кодирую это представление так:

- (void) encodeWithCoder:(NSCoder *)aCoder
{
  NSLog(@"Encoding group for %@ -- %@", self.imageFilename, self.group);
  [aCoder encodeObject:self.group forKey:@"group"];
}

NSLog показывает объект здоровой группы, который архивируется. Но когда я отменяю код, я получаю NSException:

- (id) initWithCoder:(NSCoder *)aDecoder
{
  self = [super initWithFrame:CGRectZero];

  self.group = [aDecoder decodeObjectForKey:@"group"]; // <- NSException here.
  return self;
}

Когда я впервые увидел эту ошибку, я получил довольно подробное сообщение об ошибке: Завершение работы приложения из-за невыполненной исключительной ситуации NSInvalidArgumentException, причина: '* - [NSCFSet count]: метод отправлен в неинициализированный объект изменяемого множества'

Однако, когда я воспроизводю проблему, я получаю гораздо менее информативное сообщение: прекращение вызова после выброса экземпляра 'NSException'

Achive создается с помощью этой команды:

[NSKeyedArchiver archiveRootObject:parentOfMyView toFile:myFilepath];

И открыл с этим:

[NSKeyedUnarchiver unarchiveObjectWithFile:myFilepath];

Спасибо за любую помощь в этом.

- богатый

...