В моем небольшом приложении iPad у меня есть функция «Язык переключения», которая использует наблюдатель. Каждый контроллер представления регистрирует себя своим наблюдателем во время его ViewDidload:
.
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
Когда пользователь попадает на кнопку «Изменить язык», новый язык хранится в моей модели, и наблюдатель уведомлен и вызовов Selectoreui:
SELECTROCTOR на своих зарегистрированных объектах.
Это работает очень хорошо, за исключением случаев, когда у меня есть контроллеры просмотра в таббарконтроллере. Это связано с тем, что когда вкладка нагружает нагрузку на вкладку, она выбирает вкладки иконы из своих дочерних контроллеров без инициализации видов, поэтому ViewDidload:
не вызывается, поэтому те контроллеры просмотра не получают уведомления об изменении языка. Из-за этого я переместил мою registerObject:
призывает к методу INIT
.
Назад, когда я использовал ViewDidload:
для регистрации с моим наблюдателем, я использовал ViewDidUnload:
, чтобы отменить регистрацию. Так как теперь я регистрируюсь в INIT
, это имеет большое смысл не регистрировать в DEALOC
.
Но вот моя проблема. Когда я пишу:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
Я получаю эту ошибку:
arc запрещает явное сообщение Отправить «deamloc»
, поскольку мне нужно позвонить [Super Dealoc]
для обеспечения правильной очистки суперкласс, но ARC запрещает это, я сейчас застрял. Есть ли другой способ получить информацию, когда мой объект умирает?