2013-02-03 40 views
0

我有一个UITableView,当单元格被点击时模态地呈现一个UIViewController。 UIViewController从与被轻敲的单元格相对应的模型对象接收数据,并显示一个界面来编辑这些数据。当用户完成编辑时,按钮点击会关闭UIViewController,并将编辑写入模型对象。在UITableView和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

在我看来,你在做什么没有任何缺陷,虽然可能有一个更优雅的方法来解决你的问题。一种选择是通过委托将信息传递回原来的控制器,例如,一旦完成编辑某个字段,委托会立即得到通知,并对数据模型进行必要的更改。这样,来回传递的模型参考就没有了,而且实际上确保只有一个控制器负责编辑它的内容。例如:

- (void)doneEditing { 
    if ([_delegate respondsToSelector:@selector(fieldChanged:)]) { 
     [_delegate fieldChanged:self.newFieldValue]; 
    } 
}