Отклонение контроллера модального представления

У меня есть контроллер корневого представления, который служит меню. Когда элемент выбран, он модально представляет некоторые полноэкранные данные. При нажатии кнопки возврата выполняется следующий код:

В BoardViewController.m:

 - (IBAction)menuButtonPressed:(id)sender
    {
         [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    }

Это красиво возвращает в главное меню. Но после этого я бы хотел, чтобы отклоненный контроллер представления был уничтожен (например, когда вы используете контроллеры представления push / pop). Ссылки на них я не храню, но после увольнения они остались живы. Как я могу это исправить? (Используя ARC.)

РЕДАКТИРОВАТЬ

В AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    MenuViewController *menuVC = [[MenuViewController alloc] init];
    self.window.rootViewController = menuVC;
    ...
}

В MenuViewController.m:

- (IBAction)newGame:(id)sender
    {
        BoardViewController *boardVC = [[BoardViewController alloc] init];
        boardVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:boardVC animated:YES completion:nil];
    }

РЕДАКТИРОВАТЬ 2

Что ж, проблема была вызвана неслабым свойством делегата. Спасибо за все!


person developer110    schedule 16.08.2012    source источник
comment
Разместите свой код ... Не только эту часть, не в силах помочь ...   -  person zrzka    schedule 16.08.2012
comment
Вы хотите закрыть текущее представление?   -  person Krunal    schedule 16.08.2012
comment
нет необходимости создавать экземпляр снова, просто напишите отклонение представления, оно отклонит текущее представление.   -  person Krunal    schedule 16.08.2012
comment
Решено. См. Второй журнал редактирования.   -  person developer110    schedule 16.08.2012


Ответы (3)


Я не использую ARC, но если модальный контроллер не освобождается, то это, вероятно, связано с тем, что что-то еще имеет ссылку на него. Добавляет ли модальный контроллер себя в качестве делегата к чему-либо?

person Mike M    schedule 16.08.2012
comment
В то же время мы нашли решение! Ваш ответ правильный! Спасибо! - person developer110; 16.08.2012

представление ModalViewController в коде должно выглядеть примерно так:

- (void)showModal
{
    MyModalVC *mmvc = [[MyModalVC alloc] init];

    mmvc.dismissDelegate = self;

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:mmvc];

    navController.modalPresentationStyle = UIModalPresentationFormSheet; //or similar

    [self presentModalViewController:navController animated:YES];

    [cleaningTaskVC release]; //see that it is released after the presentation so that when you dismiss it you don't have to worry about the destruction of the object anymore
    [navController release];
}

Выпуски в конце обеспечат разрушение, так что вам не придется беспокоиться об этом, когда вы его отклоните.

Вот как я его отклоняю (с протоколом и делегатом, которые я использую из класса ModalVC), и после этого нет живого экземпляра ModalVC

- (void)didDismissModalView
{
    [self dismissModalViewControllerAnimated:YES];
}

Надеюсь, это то, что вы хотите.

Удачи.

person Totumus Maximus    schedule 16.08.2012
comment
Я использую ARC, так что проблема не в выпуске. - person developer110; 16.08.2012
comment
Что ж, тогда этот ответ бесполезен для вас, и в этом случае мне очень жаль. Чтобы отклонить тот же самый ModalViewController, я использую тот же способ, что и ответ ниже. Это работает для меня, и после этого не осталось экземпляра MVC. - person Totumus Maximus; 16.08.2012
comment
Начиная с iOS 5.0, есть свойство под названием PresentingViewController, которое я использую, и оно реализует ту же концепцию, что и ваш dismissDelegate. Вот почему я не понимаю, что не так с моим кодом. Но в любом случае спасибо. - person developer110; 16.08.2012

попробуй это,

- (IBAction)menuButtonPressed:(id)sender
{
   [self dismissModalViewControllerAnimated:YES];
}
person Krunal    schedule 16.08.2012