私は最近挑戦に遭遇しました。私は本当に誰もがサポートを提供できることを感謝します。NSFetchedResultsController(コアデータ)が正しいデータソースを提供していませんテーブルビューコントローラ
問題:NSFetchedResultsController(Core Data)は、正しいデータソースTable View Controllerを提供しません。
- 私は、ユーザーのデータのほとんどを格納し、私のメインのデータベースとしてCloudKitを使用しています:私は達成しようとしています何
。
- コアデータを使用してCKRecordIDとrecordChangeTagをローカルに格納し、テーブルビューとコレクションビューを更新して、関連するCloudKitデータを取得するハンドルとして格納された値を格納します。
- テーブルビューのデータソースとしてデータ結果をフェッチするために、テーブルビューコントローラのインスタンス変数としてNSFetchedResultsControllerを作成しました。
- CloudKitデータベースは、保存変更し、アプリ経由でCKRecordを削除することができます。どのような作品
。
- Core Data NSFetchedResultsControllerを使用せずに、CloudKitとTable Viewのみがプロジェクトの最終バージョンにある場合、CloudKitの便利なAPIを使用してCloudNitデータを読み込み、テーブルビューにデータソースとして追加できます。データの変更と削除も機能しています。
私はどのようなエラーを取得します:
私はコアデータに新しいオブジェクトを追加しようとしていたとき、今私は、CloudKit、コアデータ、およびテーブルビューコントローラのインスタンス変数NSFetchedResultsControllerを持っていますデータベースと、次のエラーがコンソールとアプリケーションのクラッシュに印刷され、新しいテーブルビュー行を挿入:
- timicip_APITest_CloudKit_TableView_StoringRecordID [37142:1567814] ***(0)の後の既存のセクションに含まれている行の数は、0より大きい必要があります。 'NSInternalInconsistencyException'、理由:無効な更新:無効 セクション0の行数。 0が削除されました)、に移動した行数をプラスまたはマイナスしたものです。セクション(0で移動し、0は外に移動)。 '*
は私が動作しないこと何をした:
- 私は新しいオブジェクトがコアデータに保存されていることを確認してみましたmanagedObjectContext.save()するたびに、私はに新しいデータを挿入呼び出すことによって、永続ストアを管理しますデータベース。NSFetchedResultsControllerは、テーブルビューのデータソースメソッド "tableView(tableView:UITableView、numberOfRowsInSection section:NSFetchedResultsController)からフェッチされたオブジェクトの正しい量を提供しません。 Int) - > Int "となります。そして、アプリケーションがクラッシュします。しかし、私がアプリケーションを再び開くと、最後に開いたときに入力したデータがテーブルビューに表示されますが、テーブルビューに新しいオブジェクトを追加するとクラッシュします。 私は解決の方向性をどう思いますか
:
- 私は「managedObjectContext.save()」呼び出し本当にデータを保存し、また使用している場合、私は確信しているかどうかわからないです"NSFetchedResultsController.sections![section] .numberOfObjects"は保存されたオブジェクトを返します。
- "executeFetchRequest:error:on NSManagedObjectContext"を呼び出してデータベースから新しいフェッチ要求を作成する必要がありますが、このメソッドを使用する場合は、NSFetchedResultsControllerをテーブルビュー用に設計したポイント。
- "insertRowsAtIndexPaths(indexPaths:[NSIndexPath]、withRowAnimation animation:UITableViewRowAnimation)"には、修正されたindexPathを使用してテーブルビューを更新するためのサポートコードが必要ですか?
概要:
私はmanagedObjectContextからオブジェクトの適切な量を供給コアデータのデータベースとテーブルビューに新しい行を追加することができるように印刷されたエラーを克服する方法を知っていただきたいと思います。
対処:
NSFetchedResultsControllerDelegateを実装し、それが完全にテーブル表示のためのCRUDの流れを制御するようにさせ、むしろ挿入通常のテーブルビューの行を呼び出すよりも、NSFetchedResultsControllerDelegate」メソッドの外部メソッドを削除する、コアためデータのNSFetchedResultsControllerがデータソースとして機能しています。
どうもありがとう
よろしく、
张靖元(ジンアンナイトチャン)
NSFetchedResultsControllerの代理人を設定しましたか?設定されていない場合、FRCはコンテキストの変化を監視しないため、変更内容と同期が取れなくなります。 – pbasdf
アドバイスをいただき、ありがとうございました。私はまだデリゲートを実装していないので、試してみます。私はそれを実装する場合、私は、デリゲートを使用してテーブルビューを更新する必要がありますか、または "InsertRowsAtIndexPaths"を手動でテーブルビューで呼び出す必要がありますか? – MKD
私はNSFetchedResultsControllerDeleagateを実装しました。それは動作し、挿入と削除も本当に反応します。アドバイスありがとう – MKD