はい、特定のユーザーに関連するデータを取得するには、NSPredicate を使用する必要があります。UICollection ビューを設定している場合は、NSFetchedResultsController も読むことをお勧めします。
NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init];
NSEntityDescription *entityItem = [NSEntityDescription entityForName:@"Routine" inManagedObjectContext:self.managedObjectContext];
[fetchRequestItems setEntity:entityItem];
User* myUser = //Code for getting current user out of data store based on some paramator
[fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"userID == %@",myUser]];
//Sort by last edit ordered
NSArray *sortDescriptors = [NSArray arrayWithObjects:nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
NSArray* Routines = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
ここで注意すべきことは、Routine/Exercise オブジェクトに逆の関係を設定して、述語で現在のユーザーと比較する必要があることです。逆の関係であると私が推測するユーザーIDにはどれがありますか?
コメントから、逆の関係を設定していないので、大まかな例を次に示します。
ストアで新しいユーザーを作成すると、次のような結果が得られます。
User *thisUser = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext];
thisUser.eMail = emailAddress.text;
//And any other paras you might have
次に、そのユーザーのルーチンを作成するときは、次のようにします。
Routine *newRoutine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];
newRoutine.userId = thisUser;
次に、管理対象オブジェクトを保存して、変更をデータ ストアに書き込みます。これにより、ルーチン側で 2 つのオブジェクトがリンクされます。厳密な逆の関係のために、ユーザー側でもリンクすることを忘れないでください。
上記のようにユーザーを取得するには:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError* error;
NSArray* Users = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
ユーザーが 1 人の場合は、配列の最初の要素になります。多数のユーザーがいる場合は、述語を使用して FB ID に基づいてユーザーを見つけます。