如果直接添加到谓词
,查询工作正常NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == %@", author];
[request setPredicate:predicate];
[self.managedObjectContext executeFetchRequest:request error:nil];
查询在创建后无效,然后传递给谓词
有解决方案吗?我宁愿不将谓词本身传递给方法
作者是NSManagedObject的子类
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "%@"'
[self fetchObjectsWithQuery:[NSString stringWithFormat:@"author == %@", author];
- (void)fetchObjectsWithQuery:(NSString *)query
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@", query];
[request setPredicate:predicate];
[self.managedObjectContext executeFetchRequest:request error:nil];
}
答案 0 :(得分:2)
格式字符串在
中的工作方式不同NSString *query = [NSString stringWithFormat:@"author == %@", author] // (1)
和
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == %@", author]
特别是占位符“%@”和“%K”具有不同的含义。
(1)生成形式的字符串
,你不能在 因此,您无法将谓词预格式化为字符串。另一个证明问题的例子: 有效,但 没有。"author == <textual description of author object>"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@", query];
[NSPredicate predicateWithFormat:@"author == nil"]
[NSPredicate predicateWithFormat:"%@", @"author == nil"]
答案 1 :(得分:0)
没有充分的理由不创建和传递NSPredicate
个对象。有很多方法可以完全按照您的要求进行操作,但它们要么不仅仅使用谓词,要么需要复制NSPredicate
下面的逻辑。