0

我有一个 UITableView ,它在点击单元格时以模态方式呈现 UIViewController 。UIViewController 从与点击的单元格对应的模型对象接收数据,并显示一个界面来编辑这些数据。当用户完成编辑时,点击按钮关闭 UIViewController,并将编辑写入模型对象。

以下代码会出现任何内存或设计问题吗?

在呈现 UITableView 子类实现时,充当呈现的 UIViewController 的委托:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UINavigationController *navigationController = segue.destinationViewController;
    navigationController.delegate = this;
    navigationController.dataModel = someDataModel;
}

// delegate callback
- (void) onViewControllerDone: (UIViewController *)controller {
    [self.tableView reloadData];
}

在呈现的 UIViewController 子类实现中:

- (IBAction) done: (id)sender {
    // directly modify dataModel passed into UIViewController with data from UI
    [self.dataModel.someProperty setString: self.textView.text];

    [self.delegate onViewControllerDone:self];
}

将数据模型传递到视图中并让视图进行更改,这听起来很有趣。我是 Objective-C / iOS 开发的新手,不确定是否有更好/首选的方法来做到这一点?

4

1 回答 1

0

在我看来,尽管您的问题可能有更优雅的方法,但您正在做的事情没有任何缺陷。一种选择是通过委托将信息传递回原始控制器,例如,一旦您完成了对某个字段的编辑,委托就会立即收到通知并对数据模型进行所需的更改。这样,就不会来回传递模型引用,并且您实际上可以确保只有一个控制器负责编辑其内容。就像是:

- (void)doneEditing {
   if ([_delegate respondsToSelector:@selector(fieldChanged:)]) {
      [_delegate fieldChanged:self.newFieldValue];
   }
}
于 2013-02-03T09:01:39.890 回答