1

私はstackoverflowで多くのソリューションを試しましたが、有効なものを見つけることができません。私は、クライアントと宛先の2つのエンティティを持つコアデータモデルを持っています。どちらもNSManagedObjectサブクラスで囲まれています。NSPredicateで1対多の関係でフィルタリングする

クライアントには、いくつかのプロパティと、destinationsという1対多の関係があります。 宛先には、NSNumberでラップされたdefault_destというプロパティと、clientという逆の関係があります。

UITableViewController私は次のfetchedControllerプロパティを使用しています。リクエストはうまくいきます。私はSQLiteに格納されたクライアントを取得することができます。

if (fetchedResultsController) 
    return fetchedResultsController; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

[fetchRequest setFetchBatchSize:20]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"code" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 

fetchedResultsController.delegate = self; 

[fetchRequest release]; 
[sortDescriptor release]; 
[sortDescriptors release]; 

return fetchedResultsController; 

私は別のステップを踏みます。私は今、各クライアントの前のリクエスト(宛先に含まれる宛先NSSet)から検索された宛先をフィルタリングします。

NSPredicate* predicate = [NSpredicate predicateWithFormat:@"ANY destinations.default_dest == %@", [NSNumber numberWithInt:1]]; 

そしてIとしてfetchRequestで設定:

そのdefault_dest値がこの仕様を修正する1

である場合にのみ、特に、宛先は、私は次のようNSPredicateを追加しようとした添加することができます

[fetchRequest setPredicate:predicate]; 

リクエストを実行するたびに、「多対多の関係の障害の宛先」が返されます。どういう意味ですか?

私はiphone-core-data-relationship-faultを読みましたが、何を意味するのか分かりません。

私の質問は次のとおりです。同様の目標に達することは可能ですか?はいの場合は、何か提案がありますか?

ノート

もちろん、私は設定の目的地を反復処理することができますが、高価な反復とどのように多くのレコードが存在することができれば、私は知りません。

答えて

3

あなたの

- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys 

を使用してプリフェッチ関係にリクエストをフェッチに言う必要があります。例:

[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects: @"destinations", nil]]; 

この男ではコアデータは、指定した関係をプリフェッチし、フォールトを発生させません。あなたが使用して、それを制限することによって、要求をフェッチするためにあなたが結果の数を制限することができます。また

- (void)setFetchLimit:(NSUInteger)limit 

はそれがお役に立てば幸いです。

-1

ここでは、フェッチで特定の値を取得する別の方法があります。多分これは、(文書内のリンク名をルックアップする)ことができます:に興味のある人のための

Fetching Specific Values