4

私は周りを検索しましたが、誰かが私のために明確にしてくれることを願っているさまざまな概念についてはまだ不明です.

ある種のユーザー ID を尊重しながら、Exercise / Routine エンティティに保存しようとすると、混乱と頭痛が起こります。

コアデータを設定した方法でコアデータを理解して読むために、それは機能し、作業しているユーザーを尊重しながら、ルーチンとエクササイズに情報をプルして保存できるはずです. 私が間違っている場合、誰かが私を修正できますか?

(SQL用語で)のようなクエリを実行する必要があると思います

INSERT INTO Routine (Values) WHERE Routine.userID = user.usersExercise

あれは正しいですか?それが正しい場合。今私が抱えている問題は、そのようなクエリを生成するために、coreData コードでこれら 2 つのエンティティの内部結合を作成する方法がわからないことです。

どんな助けでも本当に感謝しています!

ここに画像の説明を入力

4

1 に答える 1

3

はい、特定のユーザーに関連するデータを取得するには、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 に基づいてユーザーを見つけます。

于 2013-04-28T17:25:40.760 に答える