我的popover中有一个静态表视图。现在数据已经改变,我想更新表格视图的内容。
问题是在viewDidLoad
中收集了数据(NSUserDefaults
),但只调用了一次。由于弹出窗口中的导航控制器,我无法使用viewWillAppear
。每次用户导航回主视图时都会调用它,但结果将不正确。仅当用户点击弹出窗口上的保存按钮时,才应保存值,但应删除/忽略临时数据。如果我从NSUserDefaults
中的viewWillAppear
获取数据,则会获得旧的存储数据,这是错误的。
是否有一种方法可以检测视图控制器是否出现在弹出窗口中(类似于 viewDidLoadInPopover ?我可以在这里收集我的数据。或者如何在弹出窗口中更新我的数据?
目前的做法:
主视图控制器(或 master )和子视图控制器(或 detail )使用一些局部变量相互通信(或传输数据) 。在viewWillDisappear
上,来自详细VC的数据被传递到主VC。另外,我设置了一个布尔值,我知道从详细VC到主VC的导航发生了。另一方面:在从主VC转换到详细VC之前,主VC将其数据传递给详细VC。
与NSUserDefaults
的完全同步仅在主VC中完成。在viewWillAppear
我检查我的布尔值。如果由于用户导航回主视图而未显示主视图,则必须从弹出窗口显示主视图。这是通过我的变量完成的,该变量在数据从详细VC传递到主VC时设置。如果主VC由popover呈现,我从NSUserDefaults
检索我的值并设置我的本地变量(后来用于在主VC和详细VC之间进行通信)。否则我将我的布尔变量反转,只做一次。这种方法依赖于以下事实:在调用viewWillAppear
之前调用我的自定义方法(将从详细VC调用以将数据传递给主VC)。这对我来说是丑陋的一部分。
当用户按下主VC上的保存按钮时,局部变量将存储回NSUserDefaults
。
通过这种方法,可以在多个视图控制器上调用popover,其中的数据始终是最新的。