2015-11-23 4 views
0

Кто-нибудь знает какой-либо документации, которая объясняет, что именно вы можете перейти к evaluateWithObject:(id)objectNSPredicate оценитьWithObject: любой объект?

Поскольку он принимает (идентификатор), я беру, что означает, что я могу буквально передать что-нибудь к нему.

Но если это так, то как бы вы отличали разницу между сбоем из-за объекта, который он не мог понять, как проверить, не удалось ли успешно выполнить оценку.

ответ

0

Любой объект может быть проверен против любого предиката, если объект не работает с используемым оператором. Если это произойдет, вы получите исключение во время выполнения, поэтому вы поймете, что сделали что-то не так.

Пример

@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 
Смежные вопросы