0

私は私を夢中にさせる単純な述語を持っています。

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パラメーターが問題であることに注意してください。NSStringパラメーターは、Dateがなくても正常に機能します。

4

1 に答える 1

0

いいえ、同じではありません。

コール#1の場合、次のように渡されます+predicateWithFormat:

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

コール#2の場合、次のように渡されます+predicateWithFormat:

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

最初のものは有効な述語フォーマット文字列であるため、機能します。2番目は有効な述語フォーマット文字列ではないため、失敗します。

于 2012-10-18T03:06:30.933 に答える