如何使用predicateWithFormat进行查询NSString包含在NSSet中

使用StackMob作为后端。 我有一个Event实体有一个关系,称为用户users (键入NSSet )。 现在我想要得到某些用户的username@"someuser"所有事件。 我的代码是这样的:

 [self.client getLoggedInUserOnSuccess:^(NSDictionary *result) { NSString *currentlyLoggedInUser = [result valueForKey:@"username"]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *eventEntity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedOjbectContext]; [request setEntity:eventEntity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username = %@", currentlyLoggedInUser]; NSLog(@"predicate: %@", predicate); [request setPredicate:predicate]; NSLog(@"request: %@", request); events = [NSArray new]; events = [self.managedOjbectContext executeFetchRequest:request error:nil]; /* this is working... for (Event *e in events) { NSLog(@"%@",[e.users filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"username == %@", currentlyLoggedInUser]]); } */ NSLog(@"events: %@", events); } onFailure:^(NSError *error) { }]; 

如果我正确理解你的问题,你必须使用下面的谓词:

 NSString *userName = @"some user"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username = %@", userName]; 

它查找具有给定用户名的任何用户的所有事件。

假设你有一个用户实体和一个事件实体,你必须传递一个用户到谓词,而不仅仅是名字。

 User *loggedInUser = // anything, eg User *loggedInUser = [[allUsers filteredSetUsingPredicate: [NSPredicate predicateWithFormat: @"username == %@", currentlyLoggedInUser] anyObject]; fetchRequest.predicate = [NSPredicate predicateWithFormat: @"%@ in users", loggedInUser]