2011-10-14 16 views
9

Il seguente codice:iOS5 iPad UIPopoverController initWithContentViewController NSGenericException

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

produce il seguente incidente in iPad2 con iOS5. Come commento devo notare che lo stesso codice funziona perfettamente in 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 

Dove "myBranchesListViewPage" è definito come:

MyBranchesListView_iPad* myBranchesListViewPage 

e "MyBranchesListViewPage" è definito come:

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

Non ho idea del motivo per cui ho questo problema in iOS5 (Xcode 4.2) ma non con iOS4.3 (Xcode 4.1)

Grazie in anticipo

+0

Dove si sta creando 'myBranchesListViewPage' e cosa si sta facendo con esso oltre a utilizzarlo nel popover? – hypercrypt

risposta

16

Ho avuto questo stesso problema. Nel mio caso stavo facendo quanto segue:

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

Per risolvere questo problema, ho appena cambiato a passare in navigationController di init su UIPopoverController al posto del popupController:

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

Non l'aggiunta di un controller di navigazione a anche il popupController lo ha risolto, ma ovviamente non hai un controller di navigazione nel popup.

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

Grazie per il tuo commento. Ha risolto il problema per me. – Genar

+2

Genar: accetta la risposta se risolve il tuo problema. (Fai clic sul "segno di spunta" verde.) – Kalle

-1

Ho avuto lo stesso problema. Pensavo che avere il ContentViewController come RootViewController del NavigationController fosse sufficiente, ma, nel mio caso, questo non era vero.

La mia finestra di applicazione ha un TabBarController come RootViewController, rendendo questo il ContentViewController, risolto il mio problema.

La mia ipotesi sarebbe che devi prendere il RootViewController della finestra in ApplicationDelegate, assegnarlo a una variabile e usarlo come ContentViewController. Puoi semplicemente usarlo accedendo a [UIApplication sharedApplication] .delegate.

saluti,

Jacco

Problemi correlati