在創建應用程序中,有許多頁面與某些不同的部分大致相同。爲了處理這種情況,我創建了一個包含子視圖的容器控制器。我希望這個子視圖被另一個控制器(及其關聯的nib)的內容填充,我將根據需要根據上下文動態創建它。如何創建一個通用(容器)控制器,將接收另一個控制器作爲輸入
我有以下方法某處
- (void) someAction {
UIViewController* contentController = [[MyContentController alloc] init];
UIViewController* containerController = [[MyContainerController alloc] initWithContentController:contentController];
[navigationController pushViewController:pageController animated:YES];
[contentController release];
[containerController release];
}
在MyContainerController.mi保留控制器屬性
- (id)initWithContentController:(UIViewController *)aContentController {
if ((self = [super initWithNibName:@"MyContainerController" bundle:nil])) {
contentController = aContentController;
}
return self;
}
在viewDidLoad中後,我做了以下
- (void)viewDidLoad {
[super viewDidLoad];
[contentViewContainer addSubview:contentController.view];
}
contentViewContainer是應該保存頁面特定信息的視圖。 不幸的是,這與EXC_BAD_ACCESS失敗。 有趣的是,如果我從viewDidLoad內部分配和初始化內容控制器,一切正常。看來,我不能通過我從另一個地方分配的控制器。 任何人都可以協助。
感謝響應。首先,你是對的,這是類似於工具欄/導航控制器。它的想法完全一樣,但它們不適合我的需求。其次,這不僅僅是將contentController作爲帶有retain的屬性的目的(這樣我就不需要自己保留它)? – nsof 2010-12-11 09:26:29
如果你知道他們(UINavigationController或UITabBarController),仍然不認爲他們是你想要的,他們是好的。其次,是的就像擁有一個保留財產。如果是這樣,你需要在dealloc實現中釋放它。您也可以將其作爲分配,但您必須確保包含的控制器未被釋放,否則您的應用程序將再次崩潰(EXC_BAD_ACCESS)。在這種情況下最好保留;) – nacho4d 2010-12-11 09:59:36