NSKeyedUnarchiver - try / catch needed?

Pelo que entendi, o uso de@try/@catch blocos é desencorajado, porqueexceptions só deve ser lançada em erros catastróficos irrecuperáveis ​​(consulte esta discussão com uma boa resposta@bbum: Handelação de exceção no iOS).

Então eu olhei pelo meu código e encontrei um@try/@catch bloco que eu não sei como me livrar de:

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

NSDictionary *dictionary;

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

O problema é que (como afirmado nodocumentação) +unarchiveObjectWithData: levanta umNSInvalidArchiveOperationException se oNSData não contém um arquivo válido.

Como os dados são fornecidos por um arquivo escolhido pelo usuário, não é garantido que ele contenha um archive válido e, portanto, o aplicativo falharia se um arquivo incorreto fosse escolhido.

Agora duas perguntas:

Por que não+unarchiveObjectWithData: apenas retornenil (Editar: e umNSError**) se o arquivo não for válido (isso não parece se qualificar como um erro catastrófico ou irrecuperável).O padrão acima está correto?@try) Eu não encontrei nenhum método que nos permite verificar se os dados contêm um arquivo válido de antemão e não encontraram nenhuma possibilidade para lidar com este caso usando o protocolo delegado. Antyhing eu esqueci?

Note que o código acima funciona, claro, eu só me pergunto se é a melhor prática.

questionAnswers(2)

yourAnswerToTheQuestion