當我嘗試從我的根視圖控制器內推UIViewController
子類(MissionViewController
)到UINavigationController
,如果我初始化視圖控制器之後引用基礎視圖的viewDidLoad
方法僅調用。但是,即使使用所調用的方法,屏幕也不會更新。pushViewController推,但沒有視圖改變
視圖控制器和導航控制器都不是零。 MissionView.xib
中的文件所有者設置爲MissionViewController
。文件所有者的視圖屬性指向nib視圖。我已驗證導航控制器的topViewController
屬性指向MissionViewController
對象。
如果我將MissionViewController
更改爲根視圖控制器,視圖加載正常。看了幾個類似的帖子,但仍然有問題。
rootViewController.h
@interface TreeGraphController : UIViewController
{
MissionViewController *missionViewCtrlr;
}
@property(nonatomic, retain) MissionViewController *missionViewCtrlr;
rootViewController.m
#import "MissionViewController.h"
...
if (!missionViewCtrlr)
{
MissionViewController *ctrlr = [[MissionViewController alloc] initWithNibName:@"MissionView" bundle:nil];
ctrlr.view.hidden = NO;
self.missionViewCtrlr = ctrlr;
[ctrlr release];
}
myAppDelegate *del = [[UIApplication sharedApplication] delegate];
[del.navigationController pushViewController:missionViewCtrlr animated:NO];
感謝簡化代碼的一部分,已被添加了錯誤的子視圖self.window(從根視圖控制器,而不是導航控制器)。回覆:簡化,我發現如果我沒有明確釋放,xcode 4.1中的clang會給出錯誤的泄漏警告。 – rimsky
沒問題。回覆:簡化,你仍然必須明確地發佈它,但你需要在dealloc中這樣做。其實,即使你使用上面的代碼,你仍然必須在dealloc中釋放missionviewCtrlr ... self.missionviewCtrlr是一個retain屬性。 –
即使在dealloc中釋放,clang仍會抱怨,如果在alloc方法中沒有明確的release語句。希望這將在未來發生改變。我知道我正在引入不必要的複雜性,但它確實感覺很好,因爲缺乏警告警告而產生虛假的安全感:-)。不過,我更喜歡處理所有警告,所以我不會錯過任何真正的問題。 – rimsky