Да, вы можете сделать это с помощью переменной:
NSPredicate *userPredicate = [NSPredicate predicateWithFormat:@"id == $user"];
Сохраните этот предикат где-нибудь, а затем сделайте это, когда вам действительно нужно начать фильтрацию:
NSDictionary *sub = [NSDictionary dictionaryWithObject:user forKey:@"user"];
NSPredicate *filter = [userPredicate predicateWithSubstitutionVariables:sub];
Это гораздо более эффективный способ повторного использования предиката, потому что синтаксический анализ строки формата (который может быть довольно дорогим) происходит только один раз.