2

fetchedResultsController fetchedObjects からオブジェクトを削除することは可能ですか?

たとえば、次のコードがあります。

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pack.packName IN %@", allowedPackNames];
            for (int i = 0; i < [tempFetchResults.fetchedObjects count]; i++){
                Author *author = [tempFetchResults.fetchedObjects objectAtIndex:i];
                NSSet *filteredQuotes = [author.quotes filteredSetUsingPredicate:predicate];
                if ([filteredQuotes count] > 0){
                  author.quotes = filteredQuotes;
                } else {
                  //remove this author from the fetchedObjects array 
                }
            }

これどうやってするの?

4

2 に答える 2

1

プロパティ「除外」または整数型のようなものを定義し、そのプロパティをフェッチ要求述語に組み込むことができると思います。見積もりを除外としてマークすると、フェッチされた結果コントローラーが、再フェッチなどを一切行わずにすべての面倒な作業を行います。

更新 #1

ここでより大きな問題に対処するには、取得した結果のコントローラーの述語でサブクエリを使用する方がはるかに優れていると思います。

使用してみてください:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(quotes, $x, $x.pack.packName IN %@).@count > 0", allowedPackNames];

フェッチされた結果コントローラーのフェッチリクエストの述語として、手動フィルタリングを忘れてください。

基本的に、このサブクエリが行うべきことは、packName 基準に適合する引用符を持つすべての作成者を除外することです。このクエリをテストしていないことを認めます。これがうまくいかないという場合は、私が面倒を見て自分でテストします。

于 2013-04-05T08:27:20.460 に答える