2016-05-04 88 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