我有一个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开发的新手,并不确定是否有更好/首选的方法来做到这一点?
答案 0 :(得分:0)
在我看来,尽管你的问题可能有更优雅的方法,但你所做的事情并没有任何缺陷。一种选择是通过委托将信息传递回原始控制器,因此,例如,一旦您完成了对某个字段的编辑,就会立即通知委托,并对数据模型进行必要的更改。这样,就不会来回传递模型引用,并且实际上确保只有一个控制器负责编辑它的内容。类似的东西:
- (void)doneEditing {
if ([_delegate respondsToSelector:@selector(fieldChanged:)]) {
[_delegate fieldChanged:self.newFieldValue];
}
}