Два UIPopovers в одном представлении

Я пытаюсь поместить два разных UIPopovers в один вид. Я довольно новичок в Objective-C и в программировании в целом, поэтому вместо умного, эффективного метода с одним поповером и изменением его содержимого в зависимости от того, как он вызывается, я просто использовал глупый, простой метод простого создания два взгляда, два делегата, два всплывающих окна и т. д. Я не знаю, из-за чего у меня возникла проблема или по какой-то другой причине.

Так вот в чем проблема. в viewdidload вид, где появляются popovers, у меня есть этот код:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    optionsViewController =[[OptionsViewController alloc]init];
    optionsViewController.delegate = self;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
    popoverController.popoverContentSize = CGSizeMake(320, 216);
    [popoverController setDelegate:self];

    newCurrencyViewController =[[newCurrencyViewController alloc]init];
    newCurrencyViewController.delegate = self;
    newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
    newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
    [newCurrencyPopoverController setDelegate:self];


}

очевидно optionsViewController это vc, который появляется внутри popover 1 (с контроллером popover, называемым popoverController), и newCurrencyViewController VC, который появляется внутри popover 2 (с контроллером popover называетсяnewCurrencyPopoverController").

Каждый раз, когда загружается представление, приложение вылетает с SIGABRT ошибка, и консоль говорит:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController initWithContentViewController:] must not be called with `nil`.'

Кроме того, есть предупреждение "метод экземпляра -alloc не найден (тип возвращаемого значения по умолчанию равен id)" для строки, которая

saysnewCurrencyViewController =[[newCurrencyViewController alloc]init];

Моей первой мыслью было, что я где-то неправильно написал имя файла, поскольку я думаю, что проблема в том, что он не находит файл с именем newCurrencyPopoverController, но я проверил все и не могу найти ни орфографических ошибок, ни чего-либо еще. Есть идеи?

Спасибо большое!

ЛУКА

2 ответа

Решение

Вы вызываете методы alloc + init вашей переменной newCurrencyViewController но вы должны вызывать их к классу этой переменной!

Строка с ошибкой:

newCurrencyViewController =[[newCurrencyViewController alloc]init];

Результат этой строки будет newCurrencyViewController == nil, И когда вы будете пытаться инициировать UIPopoverController с этой точки зрения он потерпит крах, как вы описали.

Если переменная newCurrencyViewController имеет класс, например, CurrencyViewController тогда вы должны заменить эту строку этой:

newCurrencyViewController =[[CurrencyViewController alloc] init];

У вас нет объекта для вызова alloc и init при вызове newCurrenceViewController.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    optionsViewController =[[OptionsViewController alloc]init];
    optionsViewController.delegate = self;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
    popoverController.popoverContentSize = CGSizeMake(320, 216);
    [popoverController setDelegate:self];

    //Here is your problem---------------------------------------------
    newCurrencyViewController =[[newCurrencyViewController alloc]init];
    //-----------------------------------------------------------------

    newCurrencyViewController.delegate = self;
    newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
    newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
    [newCurrencyPopoverController setDelegate:self];


}

Вы, вероятно, хотите что-то более похожее

newCurrencyViewController = [[UICurrencyViewController alloc] init];

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

Другие вопросы по тегам