0

我试图将两个不同的 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(带有popover控制器称为“popoverController”),并且newCurrencyViewController是出现在popover 2中的vc(带有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 的文件,但我检查了所有内容,但找不到任何拼写错误或任何东西。有任何想法吗?

非常感谢!

卢克

4

2 回答 2

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

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

于 2011-09-09T19:14:55.720 回答
1

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

与错误一致:

newCurrencyViewController =[[newCurrencyViewController alloc]init];

此行的结果将是newCurrencyViewController == nil. 当您尝试UIPopoverController使用该视图进行初始化时,它会如您所描述的那样崩溃。

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

newCurrencyViewController =[[CurrencyViewController alloc] init];
于 2011-09-09T19:06:16.553 回答