NSKeyedUnarchiver - prueba / captura necesaria?

Como entiendo, el uso de@try/@catch Se desaconseja el bloqueo, porqueexceptions solo debe arrojarse a errores irrecuperables y catastróficos (consulte esta discusión con una buena respuesta de@bbum: Manejo de excepciones en iOS).

Así que miré a través de mi código y encontré una@try/@catch Bloque que no sé cómo deshacerme de:

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

NSDictionary *dictionary;

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

El problema es que (como se indica en eldocumentación) +unarchiveObjectWithData: plantea unaNSInvalidArchiveOperationException Si elNSData no contiene un archivo valido

Dado que los datos son proporcionados por un archivo que el usuario eligió, no se garantiza que contenga un archivo válido y, por lo tanto, la aplicación se bloquearía si se eligiera un archivo incorrecto.

Ahora dos preguntas:

Porque no+unarchiveObjectWithData: acaba de regresarnil (Editar: y unNSError**) si el archivo no es válido (esto no parece calificar como un error catastrófico o irrecuperable).¿Es correcto el patrón anterior (usando@try)? No he encontrado ningún método que nos permita verificar si los datos contienen un archivo válido de antemano y no he encontrado ninguna posibilidad de manejar este caso utilizando el protocolo de delegado. ¿Algo que pasé por alto?

Tenga en cuenta que el código anterior, por supuesto, funciona, me pregunto si es la mejor práctica.

Respuestas a la pregunta(2)

Su respuesta a la pregunta