0

タスクを含む SQLite DB があります。各タスクには日付があり、1 つの日付に複数のタスクが存在する場合があります。

私のアプリは、1 か月分のデータのみを変更可能なディクショナリに読み込みます。各辞書項目のキーは、日付の文字列 (1、2、3 ... 31) です。対応する値は、その日付のタスクの配列です。したがって、月の各日について、0 個以上のタスクの配列があります。

変更可能なディクショナリは、ルート ビューコントローラーで宣言されます。Interface Builder のルート ビューコントローラーは、テーブル ビューの dataSource およびデリゲートです。どういうわけか、アプリは、ルート ビュー コントローラーが可変ディクショナリからデータを取得することを認識しています。私はこれを指定していないので、辞書が複数ある場合、または辞書と可変配列がある場合はどうなるのだろうか? それにもかかわらず、これは追加の配線なしで機能します。ルート ビュー コントローラーがデータをテーブルにロードすると、各セクション ヘッダーは日付をテキストとして保持し、その下の個々のセルにすべてのタスクを一覧表示します。一部のヘッダーにはセルがありません。

さて、タスクを変更するために、「エントリー」ビューコントローラーがあります。テーブル内のタスクを選択すると、エントリ ビュー コントローラーがそのタスク情報をテキスト フィールドにロードし、そこでタイトル、日付、詳細を変更したり、完了としてマークしたりできます。編集後、エントリ ビュー コントローラーがアンロードされ、ルート (テーブル) ビュー コントローラーがリロードされ、ビューの tableView が reloadData を呼び出し、変更が明らかになります。

ここに問題があります: nav コントローラーの + ボタンをクリックして新しいタスクを追加すると、データを設定する同じエントリ ビューコントローラーに移動します。既存のデータを編集するときと同じ方法で、ルート ビューコントローラーに戻ります。まだ、新しいデータ用の新しいセルは作成されていません! アプリを閉じて再度開くと、新しいデータが正しく表示されます。

アプリを閉じると、データの更新と挿入がディクショナリの配列から DB に書き込まれるため、これは新しい項目が配列の 1 つに実際に追加されたことを意味します。

概要: 既存の配列項目を編集すると、テーブルがデータをリロードすると新しいデータが表示されます。配列項目を追加すると、テーブルのリロード時に無視されます。

どうしたの?

4

1 に答える 1

3

UITableViewController に次のような行を追加できます。

[self.tableView reloadData];

これにより、UITableView 全体がリロードされます。ただし、推奨される方法は次のとおりだと思います。

[self.tableView insertRowsAtIndexPaths: indexPaths withRowAnimation: YES];

これが機能するには、行が表示される場所 (NSIndexPaths の配列) を知る必要があります。

「エントリ」ViewController 内から UITableViewController を更新する方が簡単な場合があります。

于 2010-02-12T17:16:07.267 に答える