0

そうです、私のUITableViewはすべてのセルをアルファベット順にロードして配置します。次に、サーバーから情報がダウンロードされ、計算が実行されます。すべてが完了すると、TableViewが再ロードされます。現在、これは非常に簡単な手順です。サーバーから情報がダウンロードされると、セルは移動せず、アルファベット順に残されます。情報の半分が入力され、計算に応じて小さな変更が加えられる以外は、実際には何も起こりません。ダウンロードが完了した後に行われた計算に応じて、セルをセクションに配置する簡単な方法があるかどうか疑問に思いましたか?私は4つの配列を作成するという考えを持っていました(これまでに4つのセクションしかありません)。isLoadingがnoに設定されると、TableViewのデータソースをセクションを持つように変更しますが、少し聞こえます... iffy。これはコーディングの問題ではなく理論上の質問であることは知っていますが、コードを台無しにする前に、愚かな非効率的な方法で、UITableViewCellsをセクションに「割り当てる」簡単な方法はありますか。 ?

私のやり方での私の主な問題は、ユーザーがセルを削除した場合、Core Dataの適切なエントリを削除するのは少し注意が必要で、エラーが発生しやすいということです。これは私を別のアイデアに導きました。CoreDataエンティティに属性を追加した場合はどうなりますか。その属性が割り当てられ、計算が完了すると保存されます。これに伴う問題は、既存のデータベースが機能しないことです。これを達成するためのきちんとした方法がなければなりません。

助けてくれてありがとう。コードを投稿する必要がある場合は、そのように言ってください。

4

1 に答える 1

1

セクションに関連するデータソースメソッドを実装する場合は問題ありません。

例えば:

  • numberOfSectionsInTableView
  • sectionIndexTitlesForTableView。

テーブルデータがリロードされるたびに(たとえば、[self.tableView reloadData])、これらのメソッドが呼び出され、データがそれらのセクションに配置されます。

セルはモデルの視覚的表現にすぎないことに注意してください。この場合は、フェッチされたデータです。セルはセクションに割り当てられていません。モデルに指定した方法で(テーブルビューのデータソースとデリゲートメソッドを介して)作成されるだけです。

Core Dataの使用中のエントリの削除については、NSFetchedResultsControllerを確認することをお勧めします。後者は、テーブルのデータへの変更を監視し、更新が行われると、そのデリゲートであるテーブルビューコントローラーにメッセージを送信します。

たとえば、削除は、通常のように(つまり、tableView:didEndEditingRowAtIndexPathを介して)テーブルビューデリゲートを呼び出すことから始まります。後者では、コアデータからエントリを削除します(例:[self.myDatabase.managedObjectContext deleteObject:entity])。同じ管理対象オブジェクトコンテキストを使用してNSFetchedResultsControllerを開始したとすると、削除は自動的にユーザーに反映されます。

ただし、リモートDBを使用している場合は、DBも更新されるように、保存を実行する必要があります(ただし、それを実装している場合)。

NSFetchedResultsControllerを使用する場合は、NSFetchedResultsControllerで処理できるため、セクションデータソースメソッドを実装する必要がないことにも注意してください。NSFetchedResultsControllerを初期化するときにセクション名を返すデータモデルのキーパスを定義するだけです。

于 2013-01-03T15:59:24.170 に答える