NSKeyedUnarchiver - spróbuj / złap potrzebny?

Jak rozumiem, użycie@try/@catch blokuje się, ponieważexceptions powinien być rzucany tylko w nieodwracalnych, katastrofalnych błędach (odnieś się do tej dyskusji z fajną odpowiedzią@bbum: Wyjątek Handeling w iOS).

Przejrzałem więc mój kod i znalazłem@try/@catch blok, którego nie wiem, jak się pozbyć:

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

NSDictionary *dictionary;

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

Problem polega na tym, (jak podano wdokumentacja) +unarchiveObjectWithData: podnosiNSInvalidArchiveOperationException jeśliNSData nie zawiera prawidłowego archiwum.

Ponieważ dane są dostarczane przez plik wybrany przez użytkownika, nie ma gwarancji, że zawiera ono poprawne archiwum, a zatem aplikacja ulegnie awarii, jeśli zostanie wybrany niepoprawny plik.

Teraz dwa pytania:

Dlaczego nie+unarchiveObjectWithData: po prostu wróćnil (Edytować: i anNSError**) jeśli archiwum nie jest poprawne (nie wydaje się, aby kwalifikowało się to jako błąd katastrofalny lub nieodwracalny).Czy powyższy wzór jest poprawny (używając@try)? Nie znalazłem metody, która pozwala nam sprawdzić, czy dane zawierają ważne archiwum wcześniej i nie znaleźliśmy możliwości obsługi tego przypadku przy użyciu protokołu delegata. Antyhing, które przeoczyłem?

Pamiętaj, że powyższy kod oczywiście działa, zastanawiam się tylko, czy jest to najlepsza praktyka.

questionAnswers(2)

yourAnswerToTheQuestion