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

时间:2013-02-22 14:38:04

标签: ios core-data nspredicate

使用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) {

    }];

2 个答案:

答案 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]