2011-10-14 34 views
9

El siguiente código:IOS5 iPad UIPopoverController initWithContentViewController NSGenericException

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

produce el siguiente accidente en iPad2 con iOS5. Como comentario, tengo que darme cuenta de que el mismo código funciona perfectamente en 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 

Donde "myBranchesListViewPage" se define como:

MyBranchesListView_iPad* myBranchesListViewPage 

y "MyBranchesListViewPage" se define como:

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

no tengo ni idea de por qué tengo este problema en IOS5 (Xcode 4.2) pero no con iOS4.3 (Xcode 4.1)

Gracias de antemano

+0

¿Dónde está creando 'myBranchesListViewPage' y qué está haciendo con él además de usarlo en el popover? – hypercrypt

Respuesta

16

tenía este mismo problema. En mi caso yo estaba haciendo lo siguiente:

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

Para solucionar esto, acabo de cambiar a pasar en el navigationController a init en UIPopoverController en lugar de la popupController:

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

No añadir un controlador de navegación para el popupController también lo arregló, pero obviamente no tienes un controlador de navegación en la ventana emergente.

MyViewController * popupController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[popupController setDelegate:self]; 
UIPopoverController* aPopover = [[UIPopoverController alloc] 
       initWithContentViewController:popupController]; 
[popupController release]; 
+0

Gracias por su comentario. Me ha solucionado el problema. – Genar

+2

Genar: acepte la respuesta si resolvió su problema. (Haga clic en la "marca de verificación" verde). – Kalle

-1

Tuve el mismo problema. Pensé que tener ContentViewController como RootViewController del NavigationController era suficiente, pero, en mi caso, esto no era cierto.

Mi ventana de aplicación tiene un Controlador TabBar como RootViewController, haciendo de este el ContentViewController, solucionado mi problema.

Supongo que tiene que tomar RootViewController de la ventana en su ApplicationDelegate, asignar esto a una variable y usar esto como su ContentViewController. Simplemente puede usarlo accediendo a [UIApplication sharedApplication] .delegate.

Saludos,

Jacco

Cuestiones relacionadas