2016-09-15 4 views
6

Ich habe den folgenden Code, die ich verwende, um eine Datei in meiner Mac-Anwendung aus dem Archiv entfernen:NSKeyedUnarchiver arbeitet nicht mit Swift 3

func tryOpen(_ filePath: String) throws -> NSArray { 
    if #available(OSX 10.11, *) { 
     do { 
      if let data = try? Data(contentsOf: URL(fileURLWithPath: filePath)) { 
       let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! NSArray 
       return array 
      } else { 
       throw NSError(domain: NSExceptionName.invalidUnarchiveOperationException.rawValue, code: 0, userInfo: nil) 
      } 
     } catch let ex { 
      throw ex 
     } 
    } else { 
     // Fallback on earlier versions 
     let dat = try? Data(contentsOf: URL(fileURLWithPath: filePath)) 
     let unarchiver = NSKeyedUnarchiver(forReadingWith: dat!) 
     if let array = unarchiver.decodeObject(forKey: "root") as? NSArray { 
      return array 
     } else { 
      throw NSException(name: NSExceptionName.invalidArgumentException, reason: "Unable to unarchive file", userInfo: nil) as! Error 
     } 
    } 
} 

jedoch seitdem ich zu Swift 3 in Xcode ein Upgrade 8.0, ich habe folgenden Fehlermeldung: 'unarchiveTopLevelObjectWithData' is unavailable in Swift: Use 'unarchiveTopLevelObjectWithData(_:) throws' instead, die ist ziemlich das Gleiche, oder? Also bin ich ernsthaft verwirrt, wie das zu beheben ist. Ist das ein Fehler in Xcode?

+3

Es hat eine 'NSData' ist erwartet:' versuchen NSKeyedUnarchiver.unarchiveTopLevelObjectWithData (Daten als NSData) ' . Sieht so aus, als wäre gerade etwas durch die Risse in der API gerutscht. – Rob

+0

Unrelated, aber Sie könnten dies ein wenig vereinfachen: https://gist.github.com/robertmryan/73c19aaed3792723ba3e8c28960d94e2 – Rob

+0

@Rob, das sollte eine Antwort sein kein Kommentar :) – Fawkes

Antwort

6

Die NSKeyedUnarchiver erwartet noch ein NSData:

let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as NSData) as! NSArray 

Das in Swift 4

behoben wurde
+0

In Swift 4 behoben! – Grifas

Verwandte Themen