ios: переход на другой экран с использованием атрибута modalTransitionsytle, вылетает приложение - PullRequest
0 голосов
/ 09 декабря 2011

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

@interface Navigation : UINavigationController
{
}
-(void)popToMainMenuAnimated:(BOOL)animated;

//.m file
-(void)popToMainMenuAnimated:(BOOL)animated
{
    UIViewController *element;
    for(element in self.viewControllers)
    {
        if([element isKindOfClass:[MainSettingClass class]]){
          self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
          [self presentModalViewController:element animated:YES]
        }
     }
}

Приложение аварийно завершает работу с приведенным ниже исключением.

* Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Приложение пыталось представить модально активный контроллер» * Первый стек вызовов вызовов:

ПРИМЕЧАНИЕ. Это не корневой экран, а 3-й сценарий моего приложения.

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Похоже, что UIViewController 'MainSettingsClass', который вы выбираете и пытаетесь представить (модально), уже активен. Было бы полезно, если бы вы поместили код, в котором этот контроллер представления мог быть предварительно выдвинут / представлен (и в идеале выскочил / отклонен).

Вот пара из связанных вопросов, которые могут вам помочь.

1 голос
/ 09 декабря 2011

Основываясь на журнале отладки, который вы дали, я нашел причину, выполнив поиск:
MainSettingClass экземпляр, который вы выдвинули ранее, не может быть ни повторно загружен в массив на navigationController, ни представлен модально.Вам следует создать новый экземпляр MainSettingClass и представить его, как и второй фрагмент кода.

ЗДЕСЬ - это относительный вопрос, в котором упоминается Application tried to present modally an active controller.:)

-(void)popToMainMenuAnimated:(BOOL)animated
{
    UIViewController *element;
    for(element in self.viewControllers) {
        if([element isKindOfClass:[MainSettingClass class]]) {
            self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
            [self presentModalViewController:element animated:YES];
            break;
        }
    }
}

Но почему бы не load Main Menu вместо pop?

-(void)loadMainMenuAnimated:(BOOL)animated
{
    MainSettingClass * mainMenuViewController = [[[MainSettingClass alloc] init] autoreleased];
    [mainMenuViewController.view setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
    // ...
    self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
    [self presentModalViewController:mainMenuViewController animated:YES];
}

И в показанном вами коде есть некоторые ошибки:

self.modalTransitionStyle= UIModalTransitionStylePartialCurl;
[self popToViewController:element animated:YES];

self.modalTransitionStyle= UIModalTransitionStylePartialCurl; если вы установите этот параметр, вам нужно использовать

[self presentModalViewController:yourViewController animated:YES];

, а не

[self popToViewController:element animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...