代码之家  ›  专栏  ›  技术社区  ›  progrmr

内存警告导致导航栏空白

  •  0
  • progrmr  · 技术社区  · 16 年前

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

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

    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 回复  |  直到 16 年前
        1
  •  1
  •   progrmr    16 年前

    documentation

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

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