一个视图中的两个UIPopover

时间:2011-09-09 18:54:38

标签: objective-c ios uiviewcontroller uipopovercontroller uipopover

我试图在一个视图中放置两个不同的UIPopovers。我对objective-c和编程很新,所以不是采用智能,高效的方法来设置一个popover并根据它的调用方式改变它的内容,我只是使用了愚蠢的,简单的创建方法两个观点,两个代表,两个弹出窗口等......我不知道这是不是我遇到问题,或者是出于其他原因。

所以这就是问题所在。在弹出窗口显示的视图的viewdidload中,我有以下代码:

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是出现在popover 1中的vc(带有名为“popoverController”的弹出控制器),而newCurrencyViewController是出现在popover 2中的vc(带有名为“{{1的弹出控制器) }}“)。

每次加载视图时,应用都会遇到newCurrencyPopoverController错误,控制台会说:

SIGABRT

此外,还有一条警告说“实例方法-alloc找不到(返回类型默认为id)”为

的行

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

我的第一个想法是我在某个地方错误拼写了一个文件的名称,因为我认为问题是它没有找到名为newCurrencyPopoverController的文件,但是我检查了所有内容并且找不到任何拼写错误或其他任何内容。有什么想法吗?

非常感谢!

LUKE

2 个答案:

答案 0 :(得分:1)

您正在调用变量alloc的方法init + newCurrencyViewController,但您应该将它们调用到该变量的类中!

与错误相符:

newCurrencyViewController =[[newCurrencyViewController alloc]init];

此行的结果为newCurrencyViewController == nil。当你尝试使用该视图初始化UIPopoverController时,它会像你描述的那样崩溃。

如果变量newCurrencyViewController属于类,例如CurrencyViewController,那么您应该用这一行替换该行:

newCurrencyViewController =[[CurrencyViewController alloc] init];

答案 1 :(得分:1)

当你调用newCurrenceViewController时,你没有一个对象来调用alloc和init。

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];

或者您的自定义视图控制器的名称是