Не забудьте поставить ноль в ваших методах инициализации. Например. опубликованный вами метод был бы более правильным, если бы вы написали его так:
- (id)initWithCoder:(NSCoder *)coder {
if (self = [super initWithCoder:coder]) {
[[self mapView] addAnnotations:[[coder decodeObjectForKey:@"Annotations"] retain]];
}
return self;
}
Однако это не является причиной вашей проблемы.
Есть ли веская причина для того, чтобы вы самостоятельно разархивировали свой контроллер вида? Если вы не делаете ничего особенного, вы можете положиться на существующие механизмы, чтобы сделать это. Реализация по умолчанию init для UIViewController ищет перо с тем же именем, что и у вашего контроллера представления, и, если оно существует, загружает перо (через initWithNibName).
Если есть данные, которые необходимо заархивировать, возможно, они не должны быть частью UIViewController. Может быть, в другом месте?