【问题标题】:NSPredicate ParsingNSPredicate 解析
【发布时间】:2012-10-18 02:32:54
【问题描述】:

我有一个简单的谓词让我发疯。

NSString *name;
NSDate *myDate;

-(void)fetch:(NSString *)name Date:(NSDate *)myDate
{
  ...
  //predicate
  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@ AND myDate = %@",name,myDate];
  [req setPredicate:predicate];
}

-(void)fetch2:(NSString *)predicateStr
{
   ...
  //predicate
  NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateStr];
  [req setPredicate:predicate];
}

////// call #1/////
[self fetch:name Date:myDate]; //WORKS

////// call #2/////
NSString *predicateStr = [NSString stringWithFormat:@"name = %@ AND myDate = %@",name,myDate];
[self fetch2:predicateStr]; 

//Call#2 不起作用 - 无法解析 Date ??他们不是一模一样吗?参数相同,值没有变化。注意,Date 参数是问题所在,NSString 参数可以在没有 Date 的情况下正常工作。

【问题讨论】:

    标签: ios json core-data nspredicate


    【解决方案1】:

    不,它们不一样。

    对于第 1 次呼叫,这是您传递给 +predicateWithFormat: 的内容:

    @"name = %@ AND myDate = %@"
    

    对于呼叫 #2,这是您要传递给 +predicateWithFormat: 的内容:

    @"name = Some Name AND myDate = 2012-10-17 8:05:42 PM -0800"
    

    第一个是有效的predicate format string,因此它可以工作。第二个不是有效的谓词格式字符串,因此失败。

    【讨论】:

    • 好的,如何使用第二种方法让它工作?另外,为什么它适用于名称但抱怨日期?
    • @SMA2012 为什么要使用第二种方法呢?第一个有什么问题?
    • 我把它做成了一个类方法,想重用它,从不同的地方调用它。
    • 为此使用 va_arg。但是为什么要传递 NSString 而不是 NSPredicate?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多