gpt4 book ai didi

ios - UITabBarController 似乎在关闭另一个 View 之前打开一个 View

转载 作者:行者123 更新时间:2023-11-29 13:24:50 25 4
gpt4 key购买 nike

我有一个方法,当在我的 Root View 中点击“设置”按钮时会调用该方法,该方法将两个 UIViewController 子类化,将它们附加到 UITabBarController 并将 UITabBarController 推送到导航堆栈上:

-(IBAction)onSettings:(id)sender {
// Create the Settings Views
SettingsViewController *vcSettings1 = [[Settings1ViewController alloc] initWithNibName:@"Settings1ViewController" bundle:nil];
Settings2ViewController *vcSettings2 = [[Settings2ViewController alloc] initWithNibName:@"Settings2ViewController" bundle:nil];

// Create the Tab View
UITabBarController *tabController= [[UITabBarController alloc] init];
tabController.viewControllers = @[vcSettings1,vcSettings2];

// Pass the Index of the database on to the views so they can pull the record from the database
vcSettings.recordIndex = recordIndex;
vcSettings2.recordIndex = recordIndex;

// Add the tab bar controller to the navigation stack
[self.navigationController pushViewController:tabController animated:YES];
}

在每个设置 View 中,我覆盖了 viewWillAppear 方法以从主键 recordIndex 的 sqlite 数据库加载一行数据。 (两个 View 都拉取相同的记录并从记录中显示不同的数据,除了一个字段在两者上是相同的。)

我还在每个 View 中覆盖 viewWillDisappear 以将控件数据保存回数据库。

我可以验证每次使用选项卡栏切换 View 时,viewWillDisappear 方法都会在一个关闭 View 上调用,而 viewWillAppear 方法会在打开 View 上调用。

问题是,当我在第一个 View 上更改数据并切换到第二个 View 时,第二个 View 上的数据没有更改,除非我返回到第一个 View 然后返回到第二个 View 。据我所知,这似乎是正在发生的事情:

  1. View 1 已打开。我更改字段中的数据。
  2. 我点击 View 2 的选项卡
  3. 为 View 2 调用 viewWillAppear,用数据库中的旧数据填充 View 2 中的字段。
  4. 然后为 View 1 调用 viewWillDisappear,将更改的数据保存到数据库。

似乎在关闭 View 调用 viewWillDisappear 之前打开 View 调用 viewWillAppear。

我已经尝试过其他方法,例如使用单例,并简单地尝试从两个 View 修改 recordIndex,在所有情况下,数据似乎都是在从关闭 View 保存之前从打开 View 加载的。

这是 UITabBarController 工作方式中的错误,还是我以不应该的方式滥用 viewWillAppear 和 Disappear?还有其他人遇到过这种行为吗?

最佳答案

这不是一个好的设计。不能保证在前一个 View 的 viewWillDisappear 之后调用新 View 的 viewWillAppear。即使这行得通,也不能保证它会在未来的 iOS 版本中继续工作。

如果性能不受影响,快速修复可能是在发生更改时将更改保存到数据库中,您将始终拥有一个可以在任何情况下从任何 View 访问的最新数据库。

最好的设计是拥有一些模型类,例如,您的模型对象可以通过单例访问。当您与 UI 交互时,这些模型对象会实时更新,它们是被不同 View 访问的对象,并且会使用您选择的方法定期保存它们。

关于ios - UITabBarController 似乎在关闭另一个 View 之前打开一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com