0

エンティティ「Meetings」<--->>「Users」の対多関係

「Meetings」の NSManagedSubclass を作成しましたが、次のプロパティがあります。

@property (nonatomic, retain) NSSet *users;

*users のオブジェクトは正常に保存され、表示されます。しかし、取得しようとしても何も起こりません。ブロック内にブレークポイントを設定しましたが、フェッチ ブロックがブレークポイントに到達しないようです。エラーなし。アプリケーションはまだ実行中です。

次のコードがあります。

        NSString *userName = @"iphone";
        NSLog(@"Username %@", userName);

        NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Meeting"];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"users.username == %@", userName];
        NSLog(@"Predicate %@", predicate);
        [request setPredicate:predicate];

        [self.managedObjectContext executeFetchRequest:request onSuccess:^(NSArray *results)
         { // I have setup the breakpoint here 
             NSLog(@"results.count %i", results.count);

             if(results.count > 0)
             {
                 NSLog(@"object found");
             }
         }onFailure:^(NSError *error) {
                  NSLog(@"There was an error! %@", error);
         }];

ログ:

2013-10-12 20:10:19.200 App[3128:c07] Username iphone
2013-10-12 20:10:19.200 App[3128:c07] Predicate users.username == "iphone"

Meetings の他の属性を正常に取得できます。つまり、述語行を次のように置き換えると:

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

ブレークポイントはコードを停止し、「オブジェクトが見つかりました」と表示されます。

ここでも、users リレーションシップ内に「iphone」ユーザーが表示されます。私は何を間違っていますか?

4

1 に答える 1

3

対多関係の場合、意図した動作を示す述語修飾子を使用する必要があります。sを検索しているため、ユーザーが指定されたユーザー名を持つs が必要な場合、または要件を満たす単一のユーザーのみが必要な場合Meeting、CoreData は predicate から把握できません(詳細なドキュメントについては、こちらを参照してください)。users.username == %@MeetingALLANY

私はそれがあなたが望むものだと思うので、変更のためにこれを試してください:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username == %@", userName]
于 2013-10-13T03:36:30.537 に答える