2011-11-01 62 views
0

當我嘗試從我的根視圖控制器內推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]; 

回答

1

約在rootViewController使用

[self.navigationController pushViewController:missionViewCtrlr]; 

什麼?我假設rootViewController已被推送到UINavigationController,並且導航控制器的視圖在應用程序委託中作爲self.window的子視圖添加了?

順便說一句,你可以通過只說

if(!missionViewCtrlr) 
    self.missionViewCtrlr = [[MisionViewController alloc] init...]; 
+0

感謝簡化代碼的一部分,已被添加了錯誤的子視圖self.window(從根視圖控制器,而不是導航控制器)。回覆:簡化,我發現如果我沒有明確釋放,xcode 4.1中的clang會給出錯誤的泄漏警告。 – rimsky

+0

沒問題。回覆:簡化,你仍然必須明確地發佈它,但你需要在dealloc中這樣做。其實,即使你使用上面的代碼,你仍然必須在dealloc中釋放missionviewCtrlr ... self.missionviewCtrlr是一個retain屬性。 –

+0

即使在dealloc中釋放,clang仍會抱怨,如果在alloc方法中沒有明確的release語句。希望這將在未來發生改變。我知道我正在引入不必要的複雜性,但它確實感覺很好,因爲缺乏警告警告而產生虛假的安全感:-)。不過,我更喜歡處理所有警告,所以我不會錯過任何真正的問題。 – rimsky

相關問題