我试图在一个视图中放置两个不同的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
答案 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];
或者您的自定义视图控制器的名称是