2016-08-11 4 views
2

私は最近挑戦に遭遇しました。私は本当に誰もがサポートを提供できることを感謝します。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がデータソースとして機能しています。

どうもありがとう

よろしく、

张靖元(ジンアンナイトチャン)

+0

NSFetchedResultsControllerの代理人を設定しましたか?設定されていない場合、FRCはコンテキストの変化を監視しないため、変更内容と同期が取れなくなります。 – pbasdf

+0

アドバイスをいただき、ありがとうございました。私はまだデリゲートを実装していないので、試してみます。私はそれを実装する場合、私は、デリゲートを使用してテーブルビューを更新する必要がありますか、または "InsertRowsAtIndexPaths"を手動でテーブルビューで呼び出す必要がありますか? – MKD

+0

私はNSFetchedResultsControllerDeleagateを実装しました。それは動作し、挿入と削除も本当に反応します。アドバイスありがとう – MKD

答えて

3

ソリューション:

NSFetchedResultsControllerDelegateを実装し、それは完全にテーブルビューのためのCRUDの流れを制御するために聞かせてコアデータのNSFetchedResultsControllerがデータソースとして動作しているため、NSFetchedResultsControllerDelegateメソッド以外のメソッドを挿入、削除することで、通常のテーブルビュー行を呼び出すのではなく、

関連する問題