2014-10-15 14 views
6

In Swift wird NSKeyedUnarchiver.unarchiveObjectWithData(data) eine Ausnahme auslösen, wenn Daten nicht archiviert werden können.Abfangen von NSKeyedUnarchiver-Ausnahme

Es gibt Situationen, in denen wir nicht garantieren können, dass die Daten nicht beschädigt sind, beispielsweise beim Lesen einer Datei.

Ich bin mir nicht bewusst, einen Versuch/Catch-Mechanismus in Swift, noch dass ich eine Methode wie canUnarchive kenne, die dazu beitragen würde, die Ausnahme zu verhindern.

Neben der Implementierung des Try/Catch in Obj-C gibt es eine reine Swift-Lösung für dieses Problem?

+0

Ich habe das gleiche Problem. Haben Sie schon eine Lösung gefunden? –

+0

keine lösung noch –

+0

Apple sollte versucht haben/fangen für schnelle ... –

Antwort

6

Da unarchiveObjectWithData() nicht throw seine Ausnahme ist, gibt es derzeit keine Möglichkeit, es in Swift zu fangen (wie schriftlich). Das iOS 9 SDK hat eine neue NSKeyedUnarchiver Methode decodeTopLevelObject() hinzugefügt, die jetzt throws einen Fehler gibt. Sie können dies mit dem Kontrollfluss do, try, catch abfangen.

do { 
    let result = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSData(...)) 
} catch { 
    print(error) 
}