我正在寻找通过iPhone上的模态视图执行基本属性编辑的良好模式。
假设我正在组合一个类似于Contacts应用程序的应用程序。 “详细信息”视图控制器在UITableView中显示所有联系人的属性。当UITableView进入编辑模式时,单元格中会显示一个泄露图标。单击一个单元格会使模式“编辑器”视图控制器显示一个允许用户修改所选属性的视图。此视图通常只包含一个文本框或选取器。用户单击取消/保存,“编辑器”视图将被关闭,“详细信息”视图将更新。
在这种情况下,哪个视图负责更新模型?
“编辑器”视图可以使用键值编码直接更新属性。这出现在CoreDataBooks示例中。这在某种程度上对我有意义,因为它将属性视为编辑器视图控制器的模型。
但是,这不是View Controller编程指南建议的模式。它建议“编辑器”视图控制器应该定义“细节”控制器采用的协议。当用户指示他们已完成编辑时,将使用输入的值回叫“详细信息”视图控制器,并且它将取消“编辑器”视图。使用此方法,“细节”控制器更新模型。如果您对多个属性使用相同的“编辑器”视图,则此方法似乎存在问题,因为只有一个回调方法。
很想获得有关哪种方法最有效的反馈。
答案 0 :(得分:0)
这是一个艰难的要求 - 视图控制器指南建议在概念上看起来更清晰,但另一种方法可以更容易,特别是如果您使用的是Core Data。为了给出全面的一般性意见,我想说如果你使用的是核心数据,那么使用第一种方法,因为托管对象本身就有自己的上下文并且可以自行更新(而NSFetchedResultsController
这样的类可以自动响应更新) 。
如果您没有使用Core Data,我会选择“官方”建议,因为它可以更轻松地手动管理更新的属性。至于对多个属性的关注,当然可以有多个委托方法并调用适当的方法。例如:
//if property is an address
if ([self.delegate respondsToSelector:@selector(editorView:didUpdateAddress:)])
[self.delegate editorView:self didUpdateAddress:theAddress];
//if property is a name
if ([self.delegate respondsToSelector:@selector(editorView:didUpdateName:)])
[self.delegate editorView:self didUpdateName:theName];
但是,这可能很难管理 - 你可能希望有一个属性的抽象超类,或者沿着这些线的东西。
答案 1 :(得分:0)