使用StackMob作为后端。我有一个Event
实体,它有一个名为user 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) {
}];
答案 0 :(得分:2)
如果我理解你的问题,你必须使用以下谓词:
NSString *userName = @"some user";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username = %@", userName];
它会查找具有任何具有给定用户名的用户的所有事件。
答案 1 :(得分:0)
假设您有一个User实体和一个Event实体,您必须将User传递给谓词,而不仅仅是名称。
User *loggedInUser = // anything, e.g.
User *loggedInUser = [[allUsers filteredSetUsingPredicate:
[NSPredicate predicateWithFormat:
@"username == %@", currentlyLoggedInUser] anyObject];
fetchRequest.predicate = [NSPredicate predicateWithFormat:
@"%@ in users", loggedInUser]