处理错误的表达

时间:2016-05-04 13:41:40

标签: ios cocoa nspredicate

我正在检查这样的表达式:

predicateExpression = [NSPredicate predicateWithFormat:jsonExpression];

但是如果jsonExpression有问题,我会得到一个例外。什么是处理这个的最好方法?目前有一个try / catch。有没有办法用NSError做到这一点?

1 个答案:

答案 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: / selftry上调用基础方法catch。在catch子句中,如果传递的error不是nil,则构造一个合适的NSError值(如果您愿意,可以在userInfo字典中包含原始异常),将其分配给*error,并返回nil以指示失败。如果没有发生异常,则返回NSPredicate值。

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

HTH