【问题标题】:Transition from One view controller to another - UI Update从一个视图控制器过渡到另一个 - UI 更新
【发布时间】:2023-03-30 04:34:01
【问题描述】:

假设我有两个视图控制器 A 和 B。从 A 到 B,我将视图控制器 B 添加到 A 的顶部。弹出时,我在 B 中调用以下方法

 -(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSUserDefaults *userSettings = [NSUserDefaults standardUserDefaults];
    [userSettings setObject:firstName.text forKey:@"FN"];
    [userSettings setObject:lastName.text forKey:@"LN"];
    [userSettings synchronize];
 }

此 userInfoUpdate 方法更新应用程序的 NSUserDefaults 对象。 返回视图控制器 A 时,我在 A 中调用以下方法:

- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  NSUserDefaults *userSettings = [NSUserDefaults standardUserDefaults];
  profileTextField.text = [NSString stringWithFormat:@"%@ %@",[userSettings objectForKey:@"FN"],[userSettings objectForKey:@"LN"]];
}

但这不会更新文本文件字符串。知道我在这里做错了什么吗?有更好的选择吗?

【问题讨论】:

  • 您应该显示您的实际代码。
  • 为什么不从 A 的 viewWillAppear 读取 NSUserDefaults 的数据?
  • @hackerinheels 我正在从 A 的 viewwillAppear 中读取 NSUserDefaults。我已经进行了编辑。看起来 A 的 viewwillAppear 在 B 的 ViewWillDisappear 之前被调用
  • 你为什么不打电话给[super viewWill....]?
  • 当我使用断点进行测试时,A 的 viewwillAppear 在 B 的 ViewWillDisappear 之前被调用

标签: ios objective-c viewwillappear viewdidappear


【解决方案1】:

我建议创建一个类作为您的数据模型,可以在 2 个控制器之间共享。这样您就不必担心 Viewcontroller 委托函数的顺序。

@interface DataModel: NSObject
{
    NSString *firstName;
    NSString *lastName;
}

A 包含 DataModel 的对象:

@interface AVC:UIViewController
    @property (nonatomic, strong) DataModel *myDataModel

当 A 创建 B 并传递 myDataModel 由 B 更新并保存在 viewDidDissapear 中。

A 现在会在重新出现时具有更新的值,并且还会在应用启动和升级时保存

【讨论】:

    【解决方案2】:

    您不会调用 [userSettings synchronize] 来保存它们。

    【讨论】:

    • 如果您改为更新 viewDidAppear 中的字段会怎样?
    • 另外不要忘记在 corr.methods 中调用 [super viewWillAppear:animated] 和 [super viewWillDisappear:animated]。否则你的应用会出现错误的行为。
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多