Ответ 1
См. документацию по классу:
Вы также можете создавать предикаты, которые включают переменные, так что предикат может быть предварительно определен, прежде чем подставлять конкретные значения в во время выполнения. В Mac OS X v10.4 для предикатов, использующих переменные, оценка - это двухэтапный процесс (см. predicateWithSubstitutionVariables: и оценкаWithObject:). В Mac OS X v10.5 и более поздние версии, вы можете использовать evaluationWithObject: substitutionVariables:, который объединяет эти шаги.
Затем проверьте предикат синтаксиса.
Если вы впоследствии будете вызывать evaluateWithObject:substitutionVariables:
, указанный словарь будет передан вашему блоку. Это позволяет создать довольно общий предикат, в котором можно передать полученный предикат, и для оценки можно использовать согласованный язык подстановки.