iPhone: Как правильно использовать viewDidDisappear? - PullRequest
13 голосов
/ 05 марта 2011

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

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

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

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

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

Ответы [ 4 ]

18 голосов
/ 05 марта 2011

Я реализую viewDidDisappear:(BOOL)animated EXTENSIVELY вместе с viewWillAppear, viewWillDisappear и viewWillDisappear. Основная причина для реализации этого метода состоит в том, чтобы заставить ваш контроллер представления что-то делать на событии, напримерas 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's up to your application.

    [self.audioPlayer stop];
}
11 голосов
/ 05 марта 2011

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

4 голосов
/ 05 марта 2011

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

2 голосов
/ 05 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...