Никто не застрахован от исключений. Особенно, когда дело касается клиент-серверных приложений, где контент, приходящий с сервера может быть того типа, какого приложение никак не ждет. Особенно, когда вы используете 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
