NSKeyedUnarchiver - попробовать / поймать нужно?

Как я понимаю, использование@try/@catch блоки не рекомендуется, потому чтоexceptions следует бросать только на неустранимые, катастрофические ошибки (обратитесь к этому обсуждению с хорошим ответом@bbum:Исключение Handeling в iOS).

Итак, я просмотрел свой код и нашел@try/@catch заблокировать, что я нене знаю, как избавиться от:

NSData *fileData = [NSData dataWithContentsOfFile: ....];

NSDictionary *dictionary;

@try {
   dictionary = [NSKeyedUnarchiver unarchiveObjectWithData: fileData];
}
@catch (NSException *exception) {
   //....
}
@finally {
  //...
}

Проблема в том, что (как указано вдокументация)+unarchiveObjectWithData: поднимаетNSInvalidArchiveOperationException еслиNSData Безразлично»т содержит действительный архив.

Поскольку данные предоставляются файлом, выбранным пользователем, не гарантируется, что он содержит действительный архив, и, следовательно, приложение будет аварийно завершать работу, если был выбран неправильный файл.

Теперь два вопроса:

Почему нет+unarchiveObjectWithData: просто вернись (nilРедактировать: иNSError**) если архив недействителен (это неКажется, это квалифицируется как катастрофическая или неисправимая ошибка).Правильный ли шаблон выше (используя@try)? Я не нашел метода, который позволил бы нам заранее проверить, содержат ли данные действительный архив, и не нашел возможности обработать этот случай с использованием протокола делегирования. Antyhing я не заметил?

Обратите внимание, что приведенный выше код, конечно, работает, мне просто интересно, является ли это лучшей практикой.

Ответы на вопрос(2)

Ваш ответ на вопрос