Tôi đã đoạn mã sau mà tôi sử dụng để bỏ lưu trữ tập tin trong ứng dụng Mac của tôi:NSKeyedUnarchiver không làm việc với 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
}
}
}
Tuy nhiên, kể từ khi tôi nâng cấp lên Swift 3 trong Xcode 8.0, tôi đã như sau thông báo lỗi: 'unarchiveTopLevelObjectWithData' is unavailable in Swift: Use 'unarchiveTopLevelObjectWithData(_:) throws' instead
, đó là khá nhiều điều tương tự, phải không? Vì vậy, tôi rất bối rối về cách sửa lỗi này. Đây có phải là lỗi trong Xcode không?
Nó mong đợi một 'NSData': 'thử NSKeyedUnarchiver.unarchiveTopLevelObjectWithData (dữ liệu như NSData)' . Có vẻ như một cái gì đó vừa trượt qua các vết nứt trong API. – Rob
Không có liên quan, nhưng bạn có thể đơn giản hóa điều này một chút: https://gist.github.com/robertmryan/73c19aaed3792723ba3e8c28960d94e2 – Rob
@Rob, đó phải là câu trả lời không phải là nhận xét :) – Fawkes