我正在检查这样的表达式:
predicateExpression = [NSPredicate predicateWithFormat:jsonExpression];
但是如果jsonExpression有问题,我会得到一个例外。什么是处理这个的最好方法?目前有一个try / catch。有没有办法用NSError做到这一点?
答案 0 :(得分:1)
目前有一个try / catch。有没有办法用NSError做到这一点?
您可以向NSPredicate
添加一个扩展,该扩展复制现有方法并添加NSError **
参数。使用变量参数方法这很棘手,但并非不可能,所以让我们使用predicateWithFormat:
@interface NSPredicate (WithError)
+ (NSPredicate *) predicateWithFormat:(NSString *)format argumentArray:(nullable NSArray *)arguments error:(NSError **)error;
@end
此方法的实现只需要使用predicateWithFormat:argumentArray:
/ self
在try
上调用基础方法catch
。在catch
子句中,如果传递的error
不是nil
,则构造一个合适的NSError
值(如果您愿意,可以在userInfo
字典中包含原始异常),将其分配给*error
,并返回nil
以指示失败。如果没有发生异常,则返回NSPredicate
值。
您现在使用的方法不会抛出异常,并在出错时返回NSError
值。
HTH