2016-05-04 35 views
0

我检查的表达式是这样的:处理故障表达

predicateExpression = [NSPredicate predicateWithFormat:jsonExpression]; 

但如果jsonExpression是错误的,我得到一个异常。什么是处理这个最好的方法?目前有一个try/catch。有没有办法与NSError做到这一点?

回答

1

目前有一个try/catch。有没有办法与NSError做到这一点?

您可以添加一个扩展到NSPredicate其复制现有方法,并增加了一个NSError **说法。这是棘手的,但不是不可能的,带有可变参数的方法,所以我们使用的predicateWithFormat:

@interface NSPredicate (WithError) 

+ (NSPredicate *) predicateWithFormat:(NSString *)format argumentArray:(nullable NSArray *)arguments error:(NSError **)error; 

@end 

变种这种方法的实现只需要调用底层方法上selfpredicateWithFormat:argumentArray:try/catch之一。在catch子句中,如果传递的error不是nil构造合适的NSError值(如果您愿意,可以在userInfo字典中包含原始异常),将其分配给*error,并返回nil以指示失败。如果没有发生异常,则返回NSPredicate值。

您现在使用的方法不会抛出异常并返回错误值NSError

HTH

+0

谢谢,这似乎是唯一的办法。 – brainray