かなり複雑なオブジェクトモデルで作業していますが、一部のフェッチをセクションに分けてテーブルビューに表示するのに問題があります。セクション内のオブジェクトのフェッチとグループ化
私は、Meeting
の管理オブジェクトを、プロジェクト、クライアントなどのいくつかの異なる「ポケット」にグループ化する必要があります。いくつかの理由から私はMeetingエンティティに関連付けることのできるタグとしてこれらを実装することに決めました。
だから私はタイプと値を有し、2つの間の関係を確立し、新たなTag
エンティティ作成されました:私はプロジェクトとの出会いを関連付けたい場合は、私はタグを作成
Meeting <<-->> Tag
を名前 'project'と値 'Project Name'を作成し、それを関係を介してMeetingエンティティに追加します。
私は当初NSFetchedResultsControllerを使うことを考えましたが、私は本当に理解できないすべての問題をすべて取り上げています。
例えば、これは(私は不必要なビットを省略しています)フェッチ:この特定のケースで
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:[Meeting entityName] inManagedObjectContext:moc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tags.name contains[] 'client'"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[fetch setEntity:entity];
[fetch setPredicate:predicate];
[fetch setSortDescriptors:sortDescriptors];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetch
managedObjectContext:moc
sectionNameKeyPath:@"self.tags.value"
cacheName:nil];
をインクルードフェッチは、作業を行いますが、どういうわけか、私だけではなくTags
値client
とが提示され、予期しない結果を取得しています値がproject
のものもありますか?
私はtags.name == 'project'
に私の述語を変更した場合、私は例外を取得:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'
私はおそらくここに基本的な何かが欠けていると、確かに私は述語と多くの経験を持っていますが、対象に、Appleのドキュメントはありません望みをたくさん残す。
私が理解していない副疑問とか、どちらかといえば、なぜself
を私のsectionNameKeyPathにself.tags.value
に追加する必要がありますか?それは何をするためのものか??私はそれを追加しない場合は、この場合、私は例外も同様にスローさ:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid to many relationship in setPropertiesToFetch: (tags.value)
最後に、この場合でフェッチ結果コントローラを使用する代わりに、何ですか?それは、最初にTag
の各インスタンスを取得し、どこにname == 'project'
の配列を反復してそれに関連付けられた会議オブジェクトをプルするかをまとめたものですか?非常に非効率的だと思われますが、私は今考えていることがあります。他のアイデアがあれば、私は彼らの意見を聞きたいと思っています。お時間を事前に
多くのおかげで、
Rogメール
ありがとう@Nathan de Vries、これに時間を割いていただきありがとうございます。 – Rog