IPhone: Какое правильное использование viewDidDisappear?

Я все еще очень новичок в Objective C, и мне было интересно что-то относительно viewDidDisappear. У меня есть приложение, которое воспроизводит звук (используя AVAudioPlayer), и я хочу остановить звук при переключении вида.

Если я сделаю это в моей реализации контроллера контроллера:

- (void)viewDidDisappear:(BOOL)animated {
    [self.audioPlayer stop];
}

он отлично работает. Но маленький программист в моем мозгу говорит, что я не использую это правильно. Я уверен, что вы должны CALL viewDidDisappear с логическим аргументом, а не просто указывать (BOOL) анимированные; кроме того, было бы неплохо иметь некоторую анимацию в моем представлении, переключая... опять же, это может быть совсем другое обсуждение!

Итак, что я делаю неправильно, и как я буду правильно использовать это? Нужно ли мне связать вызов кнопкой? Где правильная игра для фактического объявления самой функции? Спасибо.

Ответ 1

Я реализую viewDidDisappear:(BOOL)animated EXTENSIVELY, наряду с viewWillAppear, viewWillDisappear и viewWillDisappear. Основная причина реализации этого метода - заставить ваш контроллер просмотра что-то делать на этом событии, например viewDidDisappear Вы не вызываете этот метод, но ваше приложение будет вызывать ваш контроллер просмотра для выполнения того, что там реализовано. Поскольку это унаследованный метод, если вы убедитесь, что все унаследованные реализации из суперкласса могут быть выполнены, отлично реализовать viewDidDisappear. Поэтому я предлагаю вам изменить свой код таким образом:

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:(BOOL)animated];    // Call the super class implementation.
    // Usually calling super class implementation is done before self class implementation, but it up to your application.

    [self.audioPlayer stop];
}

Ответ 2

- (void)viewDidDisappear:(BOOL)animated - это объявление метода, а не вызов любого типа. Сам метод вызывается UIKit при манипулировании контроллерами представления; вам не нужно называть это самостоятельно, если вы не написали свой собственный код, который заставляет диспетчеры отображать и исчезать, манипулируя ими, которыми они управляют (например, если вы по какой-то причине переписывали UINavigationController).

Вы делаете что-то не так: вы должны называть [super viewDidDisappear:animated] где-то в вашей реализации, или что-то может сломаться.

Ответ 3

Голос "маленького программиста" в вашем сознании, вероятно, больше используется для процедурного кодирования, где вы вызываете ОС и говорите ей, что делать. Cocoa Touch вместо этого использует управляемую событиями парадигму, где ваша программа имеет подпрограммы (методы), которые ОС (фреймворк) вызывает, когда она хороша и готова. viewDidDisappear - одна из этих подпрограмм. Просто сидите и ждите, пока ОС назовет его (при условии, что вы все правильно настроили.)

Ответ 4

viewDidDisappear: - необязательный метод, который ваш взгляд может использовать для выполнения пользовательского кода, когда представление действительно исчезает. Вы не обязаны иметь это в своем представлении, и ваш код должен (почти?) Никогда не должен называть его.