で作業していない:私は、次のしている、Xcodeの8.0でスウィフト3にアップグレードして以来、しかしNSKeyedUnarchiverは私が私のMacアプリケーションでファイルをアーカイブを解除するために使用する次のコードを持っていスウィフト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
}
}
}
をエラーメッセージ: 'unarchiveTopLevelObjectWithData' is unavailable in Swift: Use 'unarchiveTopLevelObjectWithData(_:) throws' instead
、これはほぼ同じことですが、それは間違いありません。だから私は真剣にこれを修正する方法について混乱している。これはXcodeのバグですか?
に改善されてきたそれは 'NSData'期待しています:' 'してみてくださいNSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSDataのようにデータを) 。 APIのクラックにちょうど間違ったものがあるように見えます。 – Rob
関連していませんが、これを少し簡略化することができます:https://gist.github.com/robertmryan/73c19aaed3792723ba3e8c28960d94e2 – Rob
@Rob、答えはコメントではありません:) – Fawkes