modalViewController не отображается при нажатии кнопки

#objective-c #modalviewcontroller

#objective-c #modalviewcontroller

Вопрос:

У меня есть этот ViewController с UIButton на нем. Эта кнопка запускает метод, и на его месте должен появиться modalVC. Но по какой-то причине он больше не работает. Я использовал тот же код раньше без каких-либо проблем, но все же это меня беспокоит.

 -(void)showModalVC //the method that's being fired by the button.
{
    NSLog(@"modalVC to create a table"); //this log is being printed so the button fires as proper.

    self.myModalVC = [[MyModalViewController alloc] init]; //a local var gives same results.

    self.myModalVC.dismissDelegate = self; //the delegate is handled as proper.

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:self.myModalVC];

    //navController.modalPresentationStyle = UIModalPresentationFormSheet;

    [self presentModalViewController:navController animated:YES];

    [self.myModalVC release];
    [navController release];
}
  

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

Я использовал этот же метод раньше (в других проектах в других контекстах), поэтому я поражен, что он еще не работает. Метод запускается, и он передает каждую строку кода без сбоев.

Если у вас есть идея. опубликуйте это здесь. Спасибо.

Ответ №1:

Первое, о чем я подумал, это то, что вы создаете пропущенный объект в этой строке:

 self.myModalVC = [[MyModalViewController alloc] init];
  

self. сохранит myModalVC, alloc также сохранит его, и вы, вероятно, освобождаете его только в методе dealloc.

Во всех других средствах код выглядит вполне рабочим. Но, глядя на то, как вы используете self. префикс, может быть, у вас проблема с памятью где-то еще в вашем приложении? Попробуйте прочитать о свойствах и методах доступа.

Комментарии:

1. Спасибо за ваш вклад. Однако это не проблема с памятью. Выделение, которое я освобождаю в конце функции, и свойство в методе dealloc моего класса. И поскольку у меня нет двойных бесплатных сбоев или утечек, я думаю, что я в безопасности.

Ответ №2:

 -(void)showModalVC
{
    self.myModalVC = [[ModalVC alloc] init];

    self.myModalVC.dismissDelegate = self;

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:self.myModalVC];

    navController.modalPresentationStyle = UIModalPresentationFormSheet; //or something similar, this one is used on an iPad

    UILabel *navTopItemTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
    navTopItemTitle.text = @"Modal shizzle";
    navTopItemTitle.backgroundColor = [UIColor clearColor];
    navTopItemTitle.textColor = [UIColor whiteColor];
    navTopItemTitle.textAlignment = UITextAlignmentCenter;

    [navController.navigationBar.topItem setTitleView:navTopItemTitle];

    [self presentModalViewController:navController animated:YES];

    [self.addTabViewController release];
    [navController release];
}
  

Проблема решена.