1

在我的 iPhone 应用程序中,有两个 UIViewController;两者都嵌入在 UITabBarController 中。然而,当 TabBarController 被点击并且 VC 的开关时,屏幕上的 VC 将数据上传到 NSUserDefaults,然后被切换到的 VC 从 NSUserDefaults 获取该数据。

我目前所做的是在第一个 VC 的 viewWillDisappear 中上传数据,然后在第二个 VC 的 viewWillAppear 中获取它。问题是即将放在屏幕上的 VC 的 viewWillAppear 在“旧”VC 的 viewWillDisappear 之前被调用,因此它会尝试获取尚未上传的数据。

我可以使用什么,所以“旧 VC”是第一个知道它什么时候要离开屏幕的人,这样它就可以在新的 VC 获取数据之前上传数据?

*我还尝试设置一个 UITabBArControllerDelegate 以便旧的 VC 会收到 - tabBarController:didSelectViewController: 但是调用也太晚了。

4

3 回答 3

4

如果您不打算传输大量信息,则可以使用默认变量作为众多可用选项之一。它可能不是最好的,但它会起作用。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:Variable forKey:@"variable"];
    [defaults synchronize];

设置变量

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *fetchVariable = [defaults objectForKey:@"variable"];

在另一个 VC 中检索它。

于 2012-12-30T08:45:32.873 回答
0

我可以使用什么,所以“旧 VC”是第一个知道它什么时候要离开屏幕的人,这样它就可以在新的 VC 获取数据之前上传数据?

您可以尝试使用– tabBarController:didSelectViewController:UITabBarControllerDelegate 方法将数据保存在NSUserDefaults; 这当然应该viewWillAppear在任何控制器中调用。

如果您想保留当前的方法,请尝试在第二个视图控制器中使用viewDidAppear:而不是。viewWillAppear:如果您没有从中获取大量数据NSUserDefaults(我猜应该是这种情况)并且您的第二个视图控制器 UI 没有在显示数据时引入延迟,这应该可以正常工作。

您拥有的另一种方法是让第一个控制器在NSUserDefaults每次更改时更新其数据。

于 2012-12-30T08:46:43.963 回答
0

写和回读听起来像是不必要的开销。当然,除非您无论如何都需要编写它。

我会让前一个UIViewController将包装在一个对象中的所有数据传递给UITabBarController,然后将它传递给新的UIViewController. 如果这是所有(或大部分)选项卡的模式,请创建一个新协议并让您UIViewController的 s 实现它。然后,您UITabBarController只需检查控制器是否符合您的协议,就可以确定哪些控制器需要它。

于 2012-12-30T08:58:42.150 回答