У меня проблемы с разархивированием объекта 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];
Спасибо за любую помощь в этом.
- богатый