如何使用 predicateWithFormat 查询 NSString 包含在 NSSet 中
Posted
技术标签:
【中文标题】如何使用 predicateWithFormat 查询 NSString 包含在 NSSet 中【英文标题】:How can I use predicateWithFormat for query a NSString is contained in an NSSet 【发布时间】:2013-02-22 14:38:03 【问题描述】:使用 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)
];
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,您必须使用以下谓词:
NSString *userName = @"some user";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username = %@", userName];
它会查找具有给定用户名的任何用户的所有事件。
【讨论】:
@yongho:为什么它不起作用?您是否收到错误消息或没有结果或错误结果? @yongho:我自己测试了它并且它有效。也许我没有正确理解您的问题。你能显示predicate
和request
的NSLog()输出吗?
谓词:ANY users.username == "testuser" 请求:NSLog(@"%@", [events valueForKeyPath:@"users.username"]);
的输出
"(\n test\n)", "(\n)", "(\n testuser\n)"【参考方案2】:
假设您有一个 User 实体和一个 Event 实体,您必须将一个 User 传递给谓词,而不仅仅是名称。
User *loggedInUser = // anything, e.g.
User *loggedInUser = [[allUsers filteredSetUsingPredicate:
[NSPredicate predicateWithFormat:
@"username == %@", currentlyLoggedInUser] anyObject];
fetchRequest.predicate = [NSPredicate predicateWithFormat:
@"%@ in users", loggedInUser]
【讨论】:
以上是关于如何使用 predicateWithFormat 查询 NSString 包含在 NSSet 中的主要内容,如果未能解决你的问题,请参考以下文章
用于电子邮件问题的 NSPredicate predicateWithFormat
NSPredicate predicateWithFormat 导致异常
NSPredicate predicateWithFormat 从键中删除 $ 符号