内存警告导致空白导航栏

时间:2010-05-12 17:06:47

标签: iphone memory uiviewcontroller uinavigationcontroller

我有一个基于导航栏的应用程序,而在UIViewController中,我在选择照片时会收到内存警告。它被处理但是当我弹出viewcontroller并返回到顶层视图控制器时,导航栏是空白的。其他所有内容都会重新加载,但不会导航栏按钮和标题。

我知道viewDidUnload是在顶级视图控制器上调用的,当我导航回到它时,VC会再次使用viewDidLoad重新加载,但导航栏没有加载,它来自mainwindow.xib。我有什么想法我做错了吗? (OS 3.2,iPad)

编辑以下是控制台日志的摘录,显示了内存警告时发生的情况:

09:55:25.864 -[PhotoBox setPhotoImage:] size {1536, 2048} 
09:55:26.169 -[PhotoBox setPhotoImage:] resized to {768, 1024} 
09:55:26.180 Received memory warning. Level=1 
09:55:26.236 ClockMakerVC: viewDidUnload 
09:55:26.240 -[ClockMakerVC didReceiveMemoryWarning] 
09:55:26.271 saving 1 state objs to /var/mobile/Applications/82F2C13B-8663-4241-A603-B2BAD29691C1/Documents/ViewItem_State_Data 
09:55:26.298 -[ItemSettingsVC didReceiveMemoryWarning]

此时我点击导航栏后退箭头返回到父视图控制器,这会导致它上面有一个viewDidLoad(因为之前已经卸载了):

09:55:44.477 read 1 state objs from /var/mobile/Applications/82F2C13B-8663-4241-A603-B2BAD29691C1/Documents/ViewItem_State_Data 
09:55:44.479 loadSavedItems: 295376119.689 opts=0 np=2 P=(284,402,200,200) L=(412,274,200,200) 1 PhotoBox 
09:55:44.484 ClockMakerVC: viewDidLoad: 1 saved items loaded

1 个答案:

答案 0 :(得分:1)

根据documentation viewDidLoad是“......用于对从nib文件加载的视图执行其他初始化步骤。”

我一直认为viewDidLoad只被调用一次,并且最近才意识到在内存警告之后再次调用它(在视图被卸载然后重新加载之后)。

第二次调用时,viewDidLoad中我的主视图控制器的init代码部分工作不正常。我修复了它的一部分并将它的一部分移动到awakeFromNib,这解决了这个问题。