0

这是一个软件设计问题,在第二个屏幕(红色箭头)上验证后如何进行?有很多方法可以实现这一点,只是想知道哪一个是最好的。

意见

在屏幕 2 上,当用户点击保存时,我们主要有 4 件事要做。

  1. 将信息复制到项目

    item.attribute1 = UITextField1.text
    item.attribute2 = UITextField2.text
    ...
    
  2. 保存项目(我们使用类似于 CoreData 的 ORM)。弹出错误警报

    BOOL error = [item save]
    ...
    
  3. 如果成功,更新列表(在屏幕 1 上)

    ...
    [tableView reloadData]
    
  4. 并删除视图(屏幕 2)

    [self dismiss...]
    

问题是,每个步骤(1...4)应该由哪个控制器负责,它们应该如何通过委托+协议相互通信?

第一种解决方案:在屏幕 2 控制器上,执行步骤 1 和 2。如果保存成功,调用屏幕 1 控制器委托并执行步骤 3。然后返回屏幕 2 控制器,删除自己。

第二种解决方案:在屏幕 2 控制器上,只需执行步骤 1。调用屏幕 1 控制器并执行 2+3+4。

也许否则?

谢谢!

4

1 回答 1

0

从我看来,屏幕 2 应该执行 1、2、4 步骤,当屏幕 2 调用关闭视图时,它应该是

[self dismissViewControllerAnimated:YES completion:^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:nil userInfo:userInfo]; }];

这使您在模态屏幕 2 之前使用屏幕 1 实现 NSNotification

- (void)viewDidLoad {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadDataWithNotification:) name:@"reloadData" object:nil]; 
}

- (void)reloadDataWithNotification:(NSNotification *)notification {
     [tableView reloadData];
}
于 2013-06-28T03:08:59.567 回答