2011-01-25 6 views
1

RootViewController(これはUITableViewController)です。その中の各セルは、異なる人物のためのいくつかの統計を示します。これらのセルのいずれかをタップしてDetailViewController(UIViewController)を押し、(モデルオブジェクトに格納されている)統計を変更することができます。そのユーザーの統計の変更が完了したら、[戻る]ボタンをクリックすると、popViewControllerAnimatedが呼び出されます。DetailViewControllerの変更後にUITableViewController内のセルを更新する

私の質問は:このプレイヤーのステータスが変更され、それに応じてセルが更新されたことをRootViewControllerで知る最良の方法は何ですか?どのセルがタップされたのかをRootViewControllerに記録してから、DetailViewControllerの完了後に適切なsetNeedsDisplayを呼び出す必要がありますか?もしそうなら、私はこれをどのような方法で行うべきですか? viewWillAppear?

また、より良い方法がありますか?これはかなり一般的な作業であると思われ、私は何かが明らかでないことが分かっています。

答えて

2

これは、モデルがどのように設計されているか、コアデータを使用しているかどうかによって異なります。

基本的な原則は、詳細ビューで変更されるモデルオブジェクトのプロパティを観察することです。ディテール・コントローラーで何かが変わると、何とかその表のセルが汚れているとマークされます。テーブルビューが再び表示されたら、[tableView cellForRowAtIndexPath:]で変更されたセルを取得し、セルを再構成します。 cellForRowAtIndexPath:メソッドは、セルが表示されていない場合は手軽にnilを返します。セルが表示されていないと、不要なセルを更新する時間がかかりません。

コアデータを使用している場合は、NSFetchedResultsControllerがほとんどすべてを処理します。モデルオブジェクトを観察して、変更された各セルの代理人にcontroller:didChangeObject:atIndexPath:forChangeType:newIndexPath:メッセージを送信します。次に、テーブルビューを適切に変更することができます。

私がチェックさストレージチェックボックスのための使用コアデータとナビゲーションベースのアプリケーションテンプレートを使用して新しいXcodeプロジェクトを作成お勧めします。テンプレートには前述のパターンのデフォルトの実装があります。

+0

ありがとうございます!私はまだiOSプログラミングの新人ですから、CoreDataをまだ試していません。私はそれを、あなたが提案したやり方で、テーブルセルを汚れているとマークすることによって、かなりうまく機能させました。 –

関連する問題