我有一个显示模型对象数据的基本表视图控制器,我们称之为 object userInfo。每个单元格都连接到不同的视图控制器,用户可以在其中修改userInfo属性。一个属性是数组names。数组中的每个name都显示在单个表格部分中。名称单元格连接到一个简单的视图控制器,其中包含一个文本字段来编辑name或添加name到数组中。
这是一个非常简单的概念,但我看到了几种不同的实现方式。我想使用最符合 MVC 设计的最干净的方法。
在我当前的实现中 prepareForSegue
if ([segue.identifier isEqualToString:@"EditName"]) {
        EditNameVC *controller = segue.destinationViewController;
        controller.userInfo = self.userInfo;
        NSArray *names = [self.userInfo objectForKey:@"names"];
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSDictionary *nameInfo = [names objectAtIndex:indexPath.row];
        NSString *name = [nameInfo objectForKey:@"title"];
        if (name) {
            controller.name = name;
        }
    }
我通过isEditingBOOL 告诉 EditNameVcnameInfo字典将被替换而不是添加到array. 这在目标视图控制器中提出了一个问题。如果编辑 a name,vc如何知道替换字典的索引?我应该在 EditNameVC 中创建一个私有属性oldNameObject,遍历每个nameInfoinsnames并使用replaceObjectIdenticalTo吗?我应该通过 indexPath 吗?任何一种选择都显得草率。
作为另一个考虑,EditTableVC 是否应该对模型对象一无所知,只是调用主表视图控制器的委托,然后修改模型对象?