NSPredicate的不直观行为

时间:2011-06-19 00:14:27

标签: objective-c nspredicate

NSPredicate * thePredicate1= [NSPredicate predicateWithFormat: @"Title CONTAINS[cd] %@", searchTerm];

如果searchterm是一个空字符串,那么使用thePredicate1的搜索应该返回吗?

错误。

如果它为零,则会返回错误。

我的问题是我必须创建一个特例。因此,如果Title为空(或nil),那么我将不得不创建一个始终返回true的谓词。因为CONTAINS“”总是返回false。

我认为Contains @“”应该总是返回true。每个字符串都包含一个空字符串

他们遇到这个问题时会考虑什么?

2 个答案:

答案 0 :(得分:3)

NSLog(@"%@", [NSPredicate predicateWithFormat:@"Title CONTAINS[cd] %@", @""]);
NSLog(@"%@", [NSPredicate predicateWithFormat:@"Title CONTAINS[cd] %@", nil]);

日志:

2011-06-18 17:53:44.037 EmptyFoundation[11247:903] Title CONTAINS[cd] ""
2011-06-18 17:53:44.040 EmptyFoundation[11247:903] Title CONTAINS[cd] nil

你的问题又是什么? searchTerm不是对象吗?

答案 1 :(得分:1)

请注意,类似方法+[NSString stringWithFormat:]的文档包含以下警告:

  

重要提示:提高   如果是格式,则为NSInvalidArgumentException   是零。