私は精査しましたが、まだうまくいくものは何も見つかりませんでした。質問/回答が古すぎるか、単にうまくいきませんでした。これは「自分の」アプリでの私の最初の試みです。通過儀礼のようですので、チェックリストアプリを作っています。これが私が探しているものです:
私のデータストアには4つの属性が含まれています:(name, category, isChecked, isActive
展開するとさらに確実に続きます)
私のViewControllerが最初にロードされるとき、属性がYES(または)であるレコードのみを取得NSFetchedResultsController
するがあります。次に、それらのレコードを取得して、ユーザーの適切なセルに表示します。ユーザーがセルをクリックすると、データストアはそれに応じて属性を更新および変更します。この時点まではすべてうまくいきます。NSPredicate
isActive
[NSNumber numberWithBool:YES
isChecked
私が今しなければならないことは、リストからアイテム(1つ以上)を削除できるようにすることです。具体的には、データストアの属性を更新し、isChecked
現在isActive
のisChecked
属性がYESの場合にのみNOに更新する必要があります。(ユーザーが将来使用するためにデータベースを構築するために使用されるため、データストアからレコードを削除するつもりはありません。)
私は、とりわけ、以下を使用しました:
[[[self fetchedResultsController] fetchedObjects]
setValue:[NSNumber numberWithBool:NO]
forKey:@"isChecked"];
これは実際に機能し、チェックマークを削除し、それに応じてストアを更新します。問題は、アイテムのデータストアに別のリクエストを行うだけでなく、isActive
フェッチされた「アクティブリスト」全体を検索し、各isChecked
属性をNOに設定することです。これは小さなリストにとってはそれほど大きな問題ではないかもしれませんが、リストが拡大するにつれてこれが問題になる可能性があります。
もう1つの問題は、次のように追加した場合です。
[[[self fetchedResultsController] fetchedObjects]
setValue:[NSNumber numberWithBool:NO]
forKey:@"isActive"];
すべてのリストアイテムをNOに設定します(同じメソッド内の2番目のデータストアリクエストも同様です)。
だから私の質問は:どうすればリストを調べて、チェックされたアイテムだけを見つけて、リストisChecked
全体を処理するのではなく、属性がYESであるレコードのみを更新する(isChecked &&isActive属性=NOの両方を設定する)ことができますか?
このボタンアクション専用に別のfetchedResultsControllerを作成しようとしましたが、機能しました(つまり、クラッシュしませんでした)が、デバッガーからかなり大きな「重大なアプリケーションエラー」が発生しました。エラーメッセージは長く、どのソリューションにも関係がない可能性が高いため、投稿しません。
どんな援助でも大歓迎です。よろしくお願いします:-]。
編集
for
ループを使用してみましたfor (NSString *item in fetchedResultsController)
が、エラーが発生します...may not respond to 'countByEnumeratingWithState:objects:count'
ここで必要なのはある種のループのようですが、繰り返しになりますが、私が見つけることができるものは何も関連していないか、時代遅れです。繰り返しになりますが、ご協力いただきありがとうございます。
編集2
このボタン/メソッドに対して2番目の個別のfetchRequestControllerを実行したときに発生した元のエラーは次のとおりです。
An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (4), plus or minus the number of rows inserted or deleted from that section (0 inserted, 3 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). with userInfo (null)