Dans mon petit iPad app j'ai un "changement de langue" fonction qui utilise un observateur. Chaque vue-contrôleur enregistre avec mon observateur, lors de son viewDidLoad:
.
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
Lorsque l'utilisateur appuie sur le "changement de langue", le nouveau langage est stocké dans mon modèle et l'observateur avisé et appelle une updateUi:
sélecteur sur ses objets inscrits.
Cela fonctionne très bien, sauf quand j'ai vue les contrôleurs dans un TabBarController. C'est parce que lorsque l'onglet de la barre de charge, il récupère l'onglet icônes de son enfant contrôleurs sans l'initialisation de la vue, de sorte viewDidLoad:
n'est pas appelé, de sorte que ceux de la vue des contrôleurs ne recevez pas de changement de la langue des notifications. De ce fait, j'ai déplacé mon registerObject:
des appels dans l' init
méthode.
Lorsque j'utilisais viewDidLoad:
inscrire à mon observateur, j'ai utilisé viewDidUnload:
désinscrire. Depuis que je suis maintenant en vous inscrivant dans init
, il fait beaucoup de sens pour vous désinscrire en dealloc
.
Mais voici mon problème. Quand j'écris:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
J'obtiens cette erreur:
ARC interdit explicite d'envoi de messages de "dealloc'
Depuis que j'ai besoin d'appeler [super dealloc]
afin d'assurer des super-classes nettoyer correctement, mais l'ARC interdit, je suis maintenant bloqué. Est-il une autre façon d'être informé quand mon objet est en train de mourir?