NSP使用对象重新评估评估:?任何对象



有人知道任何文档可以解释您可以传递给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

最新更新