Никто не застрахован от исключений. Особенно, когда дело касается клиент-серверных приложений, где контент, приходящий с сервера может быть того типа, какого приложение никак не ждет. Особенно, когда вы используете XML, а чтобы его распарсить – DOM-парсер.
Объясню на примере XML. Приходит следующий контент:
<items> <item>1</item> <item>2</item> <item>3</item> </items>
DOM-парсер понимает это как следующий словарь:
items = { item = ( text = "1", text = "2", text = "3" ); };
Но когда сервер вернет лишь один объект “item”:
<items> <item>1</item> </items>
То парсер преобразует это следующим образом:
items = { item = { text = "1" }; };
Нашли разницу? Объект “item” был массивом, а стал словарем. Если бы мы “заточили” приложение на работу с “item”, как с массивом без дополнительных проверок, то на выходе получили бы креш.
Как это обойти? Легко!
Как обычно, я написал категорию DPSafe для работы с NSArray/NSMutableArray и NSDictionary/NSMutableDictionary, которая делает кодинг работы с ними безопасным с использованием литералов, о которых я писал ранее.
DPSafe позволяет обрабатывать исключения при работе с массивами или словарями.
Примеры исключений:
id object = array[@"something key"]; //Обработка обращения по ключу для массива id object = array[-1]; //Обработка обращения по неверному индексу id object = array[1]; //array.count = 1. Обработка обращения к несуществующему элементу массива array[0] = nil; //Обработка добавления нулевого значения id object = dictionary[999]; //Обработка обращения по индексу для словаря id object = dictionary[nil]; //Обработка обращения по неверному ключу dictionary[@"something key"] = nil; //Обработка добавления нулевого значения
Категория DPSafe доступна на GitHub