Любой объект может быть проверен против любого предиката, если объект не работает с используемым оператором. Если это произойдет, вы получите исключение во время выполнения, поэтому вы поймете, что сделали что-то не так.
Пример
@import Foundation;
#import <objc/runtime.h>
int main(int argc, char **argv)
{
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"moo"];
NSLog(@"%hhd", [p evaluateWithObject:@"moo"]);
NSLog(@"%hhd", [p evaluateWithObject:@[]]);
return 0;
}
компилировать с: clang -framework Foundation -fobjc-arc -fmodules test.m
Выполнить как: ./a.out
Выход:
2015-11-23 08:35:42.927 a.out[91256:5691654] 1
2015-11-23 08:35:42.930 a.out[91256:5691654] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do regex matching on object (
).'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff88e8ee32 __exceptionPreprocess + 178
1 libobjc.A.dylib 0x00007fff872284fa objc_exception_throw + 48
2 Foundation 0x00007fff8e2ac62f -[NSMatchingPredicateOperator performPrimitiveOperationUsingObject:andObject:] + 498
3 Foundation 0x00007fff8e212dd7 -[NSPredicateOperator performOperationUsingObject:andObject:] + 286
4 Foundation 0x00007fff8e212b8d -[NSComparisonPredicate evaluateWithObject:substitutionVariables:] + 313
5 a.out 0x0000000101a8decf main + 159
6 libdyld.dylib 0x00007fff86c4c5ad start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
[1] 91256 abort ./a.out