0

関連のないエンティティに対して CoreData フェッチ リクエストを実行するのに問題があります。と の 3 つのエンティティを持つオブジェクト モデルがあるMessageUserAdvisorます。

この 3 つのオブジェクトが互いに無関係であることを望みます。したがって、 aMessageには属性がsenderEmailあり、receiverEmailwhileUserAdvisorは 属性がありますemail
しかし、繰り返しになりますが、これらのオブジェクト間にそれ以上の関係はありません。たとえば、アドバイザまたはユーザー
が最新 (newst) を取得したいと考えています。Messageしかし、オブジェクトが接続されていないため、このフェッチ述語をどのように行う必要がありますか?

これは 1 つの Fetch Request 内でも可能ですか、それとも各オブジェクトを個別に配列にフェッチしてから、必要なものを取得するためにさらに操作を行う必要がありますか?

4

1 に答える 1

1

アレクサンダー、

これらのエンティティが互いに関連していない場合は、データを取得するために別のフェッチ リクエストを実行する必要があります。

したがって、たとえば、Message次のようなリクエストで最新の設定を取得できます。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"senderEmail == %@", grabbedEmail];

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

NSFetchRequest *messageFetch = [[NSFetchRequest alloc] init];
[messageFetch setEntity:[NSEntityDescription entityForName:@"Message" inManagedObjectContext:yourContext]];
[messageFetch setPredicate:predicate];
[messageFetch setSortDescriptors:sortDescriptors];
[messageFetch setFetchLimit:1];

grabbedEmail(持っていない場合)を取得するには、特定の述語を使用してリクエストを設定する必要があります。受信者の電子メールにも同じことが適用できます。例えば。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"userId == %@", @"someUserId"];

NSFetchRequest* userFetch = [[NSFetchRequest alloc] init];
[userFetch setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:yourContext]];
[userFetch setPredicate:predicate];
[userFetch setFetchLimit:1];

NSArray* userResults = [userFetch executeFetchRequest:&error];

User* retrievedUser = (User*)[userResults objectAtIndex:0];
NSString* grabbedEmail = [retrievedUser email];

日付で並べ替えるには、日付で並べ替えることができる(タイプの)Messageという属性をエンティティに追加するだけです。insertionDateNSDate

リクエストを実行すると

NSArray* results = [messageFetch executeFetchRequest:&error];

配列には、探しているresults(唯一の)要素が含まれます。Message

これらのエンティティを別々に維持する必要があるのはなぜですか?

それが役立つことを願っています。

于 2012-06-20T08:26:20.673 に答える