Ios 在视图控制器之间传输数据的新方法

Ios 在视图控制器之间传输数据的新方法,ios,uiviewcontroller,transfer,Ios,Uiviewcontroller,Transfer,我在UIViewController之间传输数据时遇到问题,在前面的问题中找不到答案 情况:我有第一个viewController(“CalViewController”),允许用户输入数据。然后,我用这些数据计算一个数字(例如,名为“卡路里”)。接下来的视图是两个UIViewController(DrinksViewController和FoodViewController)显示在TabBarController中,我需要“卡路里”值 我所尝试的: -prepareForSegue方法:它不起

我在
UIViewController
之间传输数据时遇到问题,在前面的问题中找不到答案

情况:我有第一个viewController(“CalViewController”),允许用户输入数据。然后,我用这些数据计算一个数字(例如,名为“卡路里”)。接下来的视图是两个
UIViewController
DrinksViewController
FoodViewController
)显示在
TabBarController
中,我需要“卡路里”值

我所尝试的: -
prepareForSegue
方法:它不起作用,因为
TabBarController
中的segue(序列图像板中的符号是两点之间的链接)与其他segue(序列图像板中的符号是通过门的箭头)不同

-“didSelectViewController”方法:此方法未“激活”以显示TabBarController的第一个视图。因此,我成功地将
卡路里
转移到TabBarController中的第二个ViewController(即
FoodViewController
),但没有转移到TabBarController中的第一个ViewController(即
DrinkViewController

-调用“原始”值:这里是我在
CalViewController
中所做的操作(导入
DrinksViewController.h
后)

我不知道为什么第三种方法不起作用


问题:我的
卡路里值
没有从
CalViewController
传输到
DrinkViewController
。有什么想法吗?

如果我正确理解了你的问题,那么以下几点在第一步应该是可行的 查看控制器
CalViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"yourSegueToTabBarIdentifier"]) {
        UITabBarController *tbc = [segue destinationViewController];
        DrinksViewController *dvc = tbc.viewControllers[0];
        dvc.caloriesImported = 456;
        FoodViewController *fvc = tbc.viewControllers[1];
        fvc.someProperty = someValue;
    }
}
注意

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456;
无法工作,因为它分配了一个新的
DrinksViewController
实例
与选项卡栏控制器使用的实例完全无关。

如果我正确理解了您的问题,那么以下内容在第一个示例中应该可以使用 查看控制器
CalViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"yourSegueToTabBarIdentifier"]) {
        UITabBarController *tbc = [segue destinationViewController];
        DrinksViewController *dvc = tbc.viewControllers[0];
        dvc.caloriesImported = 456;
        FoodViewController *fvc = tbc.viewControllers[1];
        fvc.someProperty = someValue;
    }
}
注意

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456;
无法工作,因为它分配了一个新的
DrinksViewController
实例
与选项卡栏控制器使用的实例完全无关。

您需要获取选项卡栏控制器中已有的实例。您可以使用self.tabBarController.viewControllers[n]执行此操作,其中n将是0、1或2,具体取决于您尝试访问的控制器。

您需要获取选项卡栏控制器中已有的实例。您可以使用self.tabBarController.viewControllers[n]执行此操作,其中n为0,1,或2取决于您尝试访问的控制器。

可能您可以将用户输入保存在plist文件中,然后从其他视图控制器访问该文件中的数据。CAlViewController是否也在选项卡栏控制器中?可能您可以将用户输入保存在plist文件中,然后从其他视图控制器访问该文件中的数据。是否CAlViewController是否也在选项卡栏控制器中?