Dodaję kontroler widoku jako obserwator do powiadomienia o UIKeyboardWillShowNotification
.Obserwator nigdy nie zostanie usunięty z NSNotificationCenter
Mam ten kod w moim viewDidLoad
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
i moim dealloc
:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Obserwator nie jest usuwany mimo dealloc
jest wywoływana, gdy kontroler widoku jest zamknięta. Kiedy po raz drugi otworzę go, NSNotificationCenter spróbuje powiadomić stary obiekt, który został zwolniony, a aplikacja ulega awarii.
Widziałem kilka pytań tutaj na StackOverflow na temat tego konkretnego problemu, ale nie z odpowiedzi działa dla mnie.
Próbowałem usunąć obserwatora w viewWillDisappear
i viewDidDisappear
, ale ten sam problem występuje.
Używam ARC.
nie używać "dealloc" z ARC –
@Vaibhav źle. Dobrą praktyką jest używanie 'dealloc', po prostu nie można nazywać' [super dealloc] 'w implementacji –
i mam taki sam problem jak ty, ale nie jestem w stanie znaleźć odpowiedniego rozwiązania, więc naprawiłem to wydać przez 'BOOL isFirstTime;', ustawić YES, gdy 'keyboardWillShow' i - (void) keyboardDidHide { if (!isFirstTime) return: ; , , , , , , isTxtFieldKeyBoard = NO; isFirstTime = NIE; } – iPatel