0

У меня есть путаница об отмене модальных просмотров:Отмены модального вида & приложения врежется

Случай 1: У меня есть контроллер представления навигации и я представляю модальный контроллер представления с этой точкой зрения навигации контроллера. Теперь, когда я должен отменить этот модальный вид, откуда я должен вызвать метод rejectModalView - контроллер просмотра навигации или контроллер модального представления?

Случай 2: У меня есть modal view controller, и я представляю другой контроллер модального представления с первого модального контроллера. Теперь, когда я должен отменить второй модальный вид, откуда я должен вызвать метод showModalView - frist modal view controller или второй контроллер модального представления?

Будет ли отменять его из-за неправильного места, также может произойти сбой приложения?

ответ

1

рекомендуемый способ обработки модальные контроллеры просмотра для нас уведомлений информировать класс, представленный его, чтобы освободить его. Как правило, вы используете код, похожий на этот, чтобы показать модальное представление.

SomeClass *yourViewController = [[SomeClass alloc] initWithNibName:@"SomeClass" bundle:nil]; 
[self presentModalViewController: yourViewController animated: YES]; 
[yourViewController release]; 

С выше кода, ваш модальный вид должен в конечном итоге сохранить кол 1. Когда вы закроете его, родительский вид выпустит его, и он будет удален из памяти. Ваша кнопка «закрыть» в вашем модальном зрении должна выполнить код, который выглядит следующим образом:

- (void)dismissSelf{ 
    [[NSNotificationCenter defaultCenter] postNotifivationName:@"I'm done" object:self]; 
} 

Назад в вашем родительском ViewController, НУ должен слушать для этого уведомления, а затем распускать вид модальный когда уведомление опубликовано.

Это говорит, чтобы ответить на ваши вопросы:

  1. модальный контроллер представления никогда не распускает себя. Отправьте уведомление, а затем пусть контроллер навигации обработает его.

  2. Вы не можете отменить первый вид модальности до тех пор, пока второй не будет уволен. Если вы это сделаете, вы получите сообщение об ошибке EXC_BAD_ACCESS. Подумайте о втором модальном представлении как «внутри» первого. Если первый уволен, второй будет уволен с собой, но он не был уволен.

1
  1. Вы должны отклонить модальный вид контроллер.
  2. вы должны отклонить его от второго контроллера режима просмотра.

аварий приложений, потому что, когда вы пытаетесь закрыть контроллер представления модально, объем соответствующего вида контроллера теряется, может быть у выпущен контроллера представления до увольнения

0

Вы всегда отклонять вид модальный из контроллер, где вы его представили (с помощью функции cancelModalViewControllerAnimated). Итак:

  1. в навигационном контроллере
  2. в первом модальный контроллер представления