8

为什么以下片段中的前者有效,而后者无效?

片段 1

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(coin_unique == %@)", [NSNumber numberWithInt:species]];

片段 2

// Does NOT Work
NSString *predicateText = @"coin_unique";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ == %@)", predicateText, [NSNumber numberWithInt:species]];

我必须根据我的方法中收到的参数动态创建谓词。

4

2 回答 2

18

coin_unique是一个键,所以它需要%K格式说明符:

NSString *predicateText = @"coin_unique";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", predicateText, [NSNumber numberWithInt:species]];

格式语法在这里描述得很好。

于 2013-03-19T16:36:24.700 回答
0

即使我的 NSPredicate 格式正确,我也收到以下错误。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Insufficient arguments for conversion characters specified in format string.' site:stackoverflow.com

像个傻瓜一样,我忘记将第二个参数传递给谓词格式(因为有两个%@)。即NSPredicate(format:predicateFormat,argumentArray:[Date()])当需要两个元素时,数组中只有一个元素:[Date(), Date()]

于 2017-03-02T01:21:49.530 回答