有人知道任何文档可以解释您可以传递给evaluateWithObject:(id)object
的确切内容吗
由于它需要一个(id),我认为这意味着我可以把任何东西传递给它
但是,如果是这样的话,你将如何区分由于对象无法验证而导致的失败与成功应用评估失败的失败之间的区别。
任何对象都可以针对任何谓词进行验证,除非该对象与正在使用的运算符不兼容。如果发生这种情况,您将得到一个运行时异常,因此您将知道自己做错了什么。
示例
@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