ModalViewController со встроенным навигационным контроллером - невозможно отклонить

Я представляю modalViewController, который на самом деле является контроллером навигации с одним представлением и настраиваемой панелью навигации. Модальное представление выглядит нормально, как и ожидалось, но когда я пытаюсь удалить его из представления с помощью [self dismissModalViewControllerAnimated: YES], я получаю сообщение «- [UINavigationController modalViewController]: сообщение, отправленное в освобожденный экземпляр». Кажется, не могу понять этого. Любые идеи?

Создание экземпляра ModalViewController:

    // Make a navigation controller and add the view inside it
    MyViewController *evc=[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    //UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:evc];
    UINib *nib = [UINib nibWithNibName:@"UINavigationBarWithBackgroundImage" bundle:nil];
    UINavigationController *nvc = [[nib instantiateWithOwner:nil options:nil] objectAtIndex:0];
    [nvc setViewControllers:[NSArray arrayWithObject:evc]];
    evc.delegate=self;
    [evc release];
    [self presentModalViewController:nvc animated:YES];
    [nvc release];

и пытаюсь удалить. Вот где возникает ошибка:

    [self dismissModalViewControllerAnimated:YES]; 

person Steve    schedule 11.02.2012    source источник


Ответы (2)


Не уверен в этом, но все равно попробуйте:

Удалять

[nvc release]

и посмотрим, если

[self dismissModalViewControllerAnimated:YES];

в настоящее время работает.

person Karim    schedule 11.02.2012
comment
Это решило это .... очень странно! Я думал, что nvc будет принадлежать родительскому представлению, поскольку это было модальное представление. Очень странное поведение, но это решает проблему. - person Steve; 13.02.2012

Есть ли причина, по которой вы загружаете два отдельных пера, чтобы показать это модальное окно? Вам не нужно загружать перо, содержащее контроллер навигации, чтобы это заработало.

Попробуйте что-то вроде этого:

// Make a navigation controller and add the view inside it
MyViewController *evc= [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

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

evc.delegate=self;

[self presentModalViewController:navController animated:YES];

[evc release];
[navController release]; 
person Dan Fairaizl    schedule 11.02.2012
comment
Я загружаю два пера, поскольку контроллер навигации происходит от класса с настраиваемым изображением панели навигации. Это казалось самым простым способом переопределить изображение панели навигации. - person Steve; 13.02.2012
comment
В качестве примечания: если ваше приложение предназначено только для iOS 5, существует гораздо лучший способ установить собственное изображение панели навигации. Взгляните здесь UINavigationBar Справочник разработчика Apple - person Dan Fairaizl; 14.02.2012