モデルオブジェクトデータを表示する基本的なテーブルビューコントローラーがあります。そのオブジェクトを呼び出しましょうuserInfo。各セルは、ユーザーがプロパティを変更できる異なるビューコントローラーに接続されuserInfoます。1つのプロパティは配列namesです。name配列内のそれぞれは、単一のテーブルセクションに表示されます。name名前セルは、配列を編集または追加するためのテキストフィールドを備えた単純なViewControllerに接続します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;
}
}
BOOLを渡して、辞書がに追加されるのではなく置き換えられることisEditingをEditNameVcに通知します。これにより、宛先ViewControllerに問題が発生します。を編集する場合、vcはどのインデックスで辞書を置き換えるかをどのように知るのでしょうか?EditNameVCでプライベートプロパティを作成し、各インをループして使用する必要がありますか?indexPathを渡す必要がありますか?どちらのオプションもだらしのないようです。nameInfoarraynameoldNameObjectnameInfonamesreplaceObjectIdenticalTo
別の考慮事項として、EditTableVCはモデルオブジェクトについて何も知らず、モデルオブジェクトを変更するメインテーブルビューコントローラーへのデリゲートを呼び出す必要がありますか?