0

セッション、ユーザー、テストの3つのエンティティがあります。セッションには0〜多数のユーザーがあり、ユーザーは0〜6のテストを実行できます。(私は0と言いますが、実際のアプリケーションでは常に少なくとも1つ、セッションには少なくとも1人のユーザー、ユーザーには少なくとも1つのテストが必要です。ただし、空の開始を表すには0と言います。)すべてのエンティティには固有のデータがあります。属性も。ユーザーには名前があり、セッションには名前があり、テストにはユーザーが入力する6つの値があります。しかし、私の問題は関係にあります。

  1. 複数のユーザーを設定して1つのセッションに追加するにはどうすればよいですか(1人のユーザーの複数のテストにも同じことが言えます)。

  2. コンテンツを正しい方法で表示するにはどうすればよいですか?複数のユーザーがいて、これらのユーザーが複数のテストを完了したセッションを表示するにはどうすればよいですか?

これが問題1に関するこれまでの私のコードです。

Session *session = [NSEntityDescription insertNewObjectForEntityForName:@"Session"
                                  inManagedObjectContext:context];
session.name = @"Session 1";

User *users = [NSEntityDescription insertNewObjectForEntityForName:@"User"
                                   inManagedObjectContext:context];
users.age = [NSNumber numberWithInt:28];
users.session = session;
//session.user = users;
[sessie addUserObject:users];

問題2に関して:セッションをログに記録できますが、セッションからユーザーをログに記録できません。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Session"
                                          inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (Session *info in fetchedObjects) {
 NSLog(@"Name of session: %@", info.name);
 NSLog(@"Having problems with this: %@",info.user);
 //User *details = info.user;
 //NSLog(@"User: %@", details.age);
}
4

1 に答える 1

2

セッションからユーザーusersへの多対関係など、多対多の関係に複数形を使用すると便利です(SOで見たコードサンプルからは一般的な方法のようです)。これは、関係の値が単一のオブジェクトではなくセットであるという事実を強調しており、物事を少し明確にする可能性があります。

したがって、モデルは次のようになります。

ここに画像の説明を入力してください

問題1:とを作成した場合Session *sessionUser *user

user.session = session;

ユーザーをセッションに追加します。呼び出し

[session addUsersObject:user];

同じ効果があります。ただし、これらの呼び出しの1つだけが必要であり、関係が逆の関係として適切に定義されている場合は、自動的に他の呼び出しを意味します。

問題2:の場合Session *sessionsession.usersはそのセッションに関連するすべてのユーザーのセットです。それはaNSSetであり、そのセットを反復処理できます。同様に、user.testsはユーザーのすべてのテストのセットです。

したがって、次のコードは、ユーザーとのすべてのセッションとテストを表示します。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Session"
                                          inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSArray *sessions = [context executeFetchRequest:fetchRequest error:&error];
for (Session *session in sessions) {
    NSLog(@"Name of session: %@", session.name);
    for (User *user in session.users) {
        NSLog(@"   User name %@, age %@", user.name, user.age);
        for (Test *test in user.tests) {
            NSLog(@"      Test: %@", test.name);

        }
    }
}
于 2012-12-15T07:16:59.357 に答える