モデルオブジェクトデータを表示する基本的なテーブルビューコントローラーがあります。そのオブジェクトを呼び出しましょう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を渡す必要がありますか?どちらのオプションもだらしのないようです。nameInfo
array
name
oldNameObject
nameInfo
names
replaceObjectIdenticalTo
別の考慮事項として、EditTableVCはモデルオブジェクトについて何も知らず、モデルオブジェクトを変更するメインテーブルビューコントローラーへのデリゲートを呼び出す必要がありますか?