iOS5 iPad UIPopoverController initWithContentViewController NSGenericException - PullRequest
9 голосов
/ 14 октября 2011

следующий код:

listViewPopoverControllerOL = [[UIPopoverController alloc] initWithContentViewController:myBranchesListViewPage];

производит следующий сбой в iPad2 с iOS5. В качестве комментария я должен отметить, что тот же код прекрасно работает в iOS4.3.

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'The content view controller argument must be the root of its associated view controller hierarchy.'
*** First throw call stack:(0x370cb8bf 0x35eaa1e5 0x370cb7b9 0x370cb7db 0x306f378d 0x306f0db9 0x5692d 0x567d1 0x37025435 0x303499eb 0x303499a7 0x30349985 0x303496f5 0x3034a02d 0x3034850f 0x30347f01 0x3032e4ed 0x3032dd2d 0x35bdfe13 0x3709f553 0x3709f4f5 0x3709e343 0x370214dd 0x370213a5 0x35bdefed 0x3035c743 0x2871 0x2830) terminate called throwing an exception

Где myBranchesListViewPage определяется как:

MyBranchesListView_iPad* myBranchesListViewPage

и «MyBranchesListViewPage» определяется как:

MyBranchesListView_iPad : UIViewController<UITableViewDelegate, UITableViewDataSource, MyDetailParserDelegate, UISplitViewControllerDelegate>

Понятия не имею, почему у меня такая проблема в iOS5 (Xcode 4.2), а не в iOS4.3 (Xcode 4.1)

Заранее спасибо

Ответы [ 2 ]

16 голосов
/ 21 октября 2011

У меня была такая же проблема. В моем случае я делал следующее:

MyViewController * popupController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[popupController setDelegate:self];
UINavigationController *  navigationController = [[UINavigationController alloc] initWithRootViewController:popupController];
[navigationController setNavigationBarHidden:YES animated:NO ]; 

UIPopoverController* aPopover = [[UIPopoverController alloc]
                        initWithContentViewController:popupController];
[popupController release];

[navigationController release];

Чтобы решить эту проблему, я просто изменил, чтобы передать NavigationController для инициализации на UIPopoverController вместо popupController:

UIPopoverController* aPopover = [[UIPopoverController alloc]
                initWithContentViewController:navigationController];

Отсутствие добавления контроллера навигации в popupController также исправило его, но тогда у вас явно нет контроллера навигации во всплывающем окне.

MyViewController * popupController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[popupController setDelegate:self];
UIPopoverController* aPopover = [[UIPopoverController alloc]
                initWithContentViewController:popupController];
[popupController release];
0 голосов
/ 17 октября 2011

У меня была такая же проблема.Я думал, что наличия ContentViewController в качестве RootViewController для NavigationController было достаточно, но в моем случае это было не так.

Мое окно приложения имеет TabBarController в качестве RootViewController, что делает егоContentViewController, исправил мою проблему.

Я полагаю, вам нужно взять RootViewController окна в вашем ApplicationDelegate, назначить его переменной и использовать его в качестве ContentViewController.Вы можете просто использовать его, зайдя в [UIApplication sharedApplication] .delegate.

С уважением,

Jacco

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...