从UIPopoverController中的视图控制器更新数据

时间:2014-11-25 09:56:03

标签: ios ipad uipopovercontroller

我的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,其中的数据始终是最新的。

0 个答案:

没有答案