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)

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