2011-10-14 27 views
9

Các mã sau đây:iOS5 iPad UIPopoverController initWithContentViewController NSGenericException

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

tạo ra vụ tai nạn sau trong iPad2 với iOS5. Như một bình luận tôi phải thông báo rằng cùng một mã hoạt động hoàn hảo trong 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 

đâu "myBranchesListViewPage" được định nghĩa là:

MyBranchesListView_iPad* myBranchesListViewPage 

và "MyBranchesListViewPage" được định nghĩa là:

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

Tôi không có ý tưởng tại sao tôi có vấn đề này trong iOS5 (Xcode 4.2) nhưng không phải với iOS4.3 (Xcode 4.1)

Cảm ơn trước

+0

Bạn tạo 'myBranchesListViewPage' ở đâu và bạn đang làm gì với nó ngoài việc sử dụng nó trong cửa sổ bật lên? – hypercrypt

Trả lời

16

Tôi có vấn đề này như vậy. Trong trường hợp của tôi, tôi đã làm như sau:

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

Để giải quyết điều này, tôi chỉ cần thay đổi để vượt qua trong navigationController init trên UIPopoverController thay vì popupController:

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

Không thêm một bộ điều khiển điều hướng để popupController ở tất cả cũng cố định nó, nhưng sau đó bạn rõ ràng là không có một bộ điều khiển điều hướng trong popup.

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

Cảm ơn bạn đã bình luận. Nó đã giải quyết được vấn đề cho tôi. – Genar

+2

Genar: chấp nhận câu trả lời nếu nó giải quyết được vấn đề của bạn. (Nhấp vào "dấu kiểm" màu xanh lá cây.) – Kalle

-1

Tôi đã gặp vấn đề tương tự. Tôi nghĩ rằng có ContentViewController là RootViewController của NavigationController là đủ, nhưng, trong trường hợp của tôi, điều này là không đúng sự thật.

My cửa sổ ứng dụng có một TabBarController là RootViewController, làm cho ContentViewController này, khắc phục sự cố của tôi.

Tôi đoán là bạn phải lấy RootViewController của cửa sổ trong ApplicationDelegate của bạn, gán điều này cho một biến và sử dụng nó làm ContentViewController của bạn. Bạn chỉ có thể sử dụng nó bằng cách truy cập [UIApplication sharedApplication] .delegate.

Kính trọng,

Jacco

Các vấn đề liên quan