Question

I am trying to put two different UIPopovers in one view. I'm fairly new to objective-c, and programming in general, so instead of doing the smart, efficient method of having one popover and changing it's contents depending on how it is called, I just used the stupid, simple method of just creating two views, two delegates, two popovers etc... I don't know if that's why I'm having a problem, or if it's for some other reason.

So here's the problem. In the viewdidload of the view where the popovers appear, I have this code:

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


}

Obviously optionsViewController is the vc that appears inside popover 1 (with popover controller called "popoverController"), and newCurrencyViewController is the vc that appears inside popover 2 (with popover controller called "newCurrencyPopoverController").

Every time the view loads, the app crashes with a SIGABRT error, and the console says:

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

Also, there's a warning saying "instance method -alloc not found (return type defaults to id)" for the line that

saysnewCurrencyViewController =[[newCurrencyViewController alloc]init];

My first thought was that I had misspelled the name of a file somewhere, since I think the problem is that it isn't finding the file called newCurrencyPopoverController, but I've checked everything and can't find any misspellings or anything. Any ideas?

Thanks very much!

LUKE

Was it helpful?

Solution

You are calling methods alloc + init of your variable newCurrencyViewController but you should call them to the class of that variable!

Line with bug:

newCurrencyViewController =[[newCurrencyViewController alloc]init];

The result of this line will be newCurrencyViewController == nil. And when you will try to init UIPopoverController with that view it will crash as you described.

If variable newCurrencyViewController is of class, for example, CurrencyViewController then you should replace that line with this one:

newCurrencyViewController =[[CurrencyViewController alloc] init];

OTHER TIPS

you dont have an object to call alloc and init on when you are calling 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];


}

you probably want something more like

newCurrencyViewController = [[UICurrencyViewController alloc] init];

Or w/e the name of your custom view controller is

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top