我有一個用XIB初始化的iPhone視圖控制器。如何在內存警告吹出後從XIB重新加載UIViewController的視圖?
如果視圖控制器的視圖在內存警告通過時不可見,它將其視圖設置爲零(釋放它)。但是,當一個重疊的視圖被解散並且被清除的視圖再次可見時,Cocoa不會從XIB重新加載;它只是創建一個空白的。這留下了一個空白的白色屏幕和一個破碎的應用程序。
蘋果文檔的UIViewController的的loadView法說,「如果視圖控制器都有一個相關的筆尖文件,此方法加載從筆尖文件的視圖。視圖控制器有一個相關的筆尖文件,如果nibName屬性返回非零價值「。所以我超越loadView只是爲了檢查nibName初始化控制器後,nibName是正確的。所以隨後調用loadView應該從XIB重新加載。我確認loadView在內存警告後再次被調用。
UPDATE:隨着越來越多的測試和記錄,我已經確定了第二viewDidLoad中電話後,該視圖的IBOutlets是不爲零。由於我將它們設置爲零,因此我認爲該視圖確實是從XIB重新加載的。那麼爲什麼它顯示爲全白屏?
感謝您的任何見解。
這裏的viewDidLoad中:
- (void)viewDidLoad
{
[super viewDidLoad];
_photoViewController = [[EGOSimplePhotoViewController alloc] initWithPhotoSource:_photoSource
scrollView:bigImageScrollView
enclosingView:photoSquare];
_photoViewController.delegate = self;
if(_progressHUD == nil)
{
if(self.navigationController.view != nil)
{
_progressHUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
}
else
{
_progressHUD = [[MBProgressHUD alloc] initWithView:self.view];
}
}
// Add HUD to screen.
if(self.navigationController.view != nil)
{
[self.navigationController.view addSubview:_progressHUD];
}
else
{
[self.view addSubview:_progressHUD];
}
[_progressHUD release];
_progressHUD.labelText = @"Loading...";
[_progressHUD show:YES];
}
而且viewDidUnload:
- (void)viewDidUnload
{
[_photoViewController release];
[super viewDidUnload];
}
您是否實現了'viewDidUnload'? – Costique 2012-02-29 04:55:12
是的。問題是如何重新加載。 – Oscar 2012-02-29 05:05:07
如果你做得對,視圖會自動重新加載。當控制器即將出現時,它會檢測到它的視圖已經被卸載,併發送自己'loadView'。請向我們展示'loadView','viewDidLoad'和'viewDidUnload'中的代碼。 – Costique 2012-02-29 05:10:26