Một điều bạn có thể sử dụng RecoverableError
là ứng dụng dựa trên tài liệu cho macOS.
Tạo dự án mới, macOS> Ca cao, kiểm tra "Tạo ứng dụng dựa trên tài liệu".
Xác định loại Lỗi của riêng bạn tuân theo RecoverableError
.
enum MyError {
case documentSavingError
//...
}
extension MyError: RecoverableError {
var recoveryOptions: [String] {
return [
"Retry", "Ignore"
]
}
func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool {
if recoveryOptionIndex == 0 {//for "Retry"
var result = false
switch self {
case .documentSavingError:
//Attempt "Retry" recovery for the failed operation, and return the result
//...
print("assume recovery attempt successfully finished...")
result = true
//...
}
return result
} else if recoveryOptionIndex == 1 {//for "Ignore"
return true
}
fatalError("something wrong...")
}
}
Sửa đổi phương thức data(ofType:)
trong Document.swift để báo lỗi.
override func data(ofType typeName: String) throws -> Data {
//throw RecoverableError
throw MyError.documentSavingError
}
Bạn cần thêm một số mẹo trong việc áp dụng tài liệu dựa trên hiện tại ...
Tạo một mã nhanh chóng mới để phân lớp NSApplication
.
import AppKit
@objc(Application)
class Application: NSApplication {
override func presentError(_ error: Error, modalFor window: NSWindow, delegate: Any?, didPresent didPresentSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
//print(error)
let underlyingError = (error as NSError).userInfo[NSUnderlyingErrorKey] as? Error ?? error
//print(underlyingError)
super.presentError(underlyingError, modalFor: window, delegate: delegate, didPresent: didPresentSelector, contextInfo: contextInfo)
}
}
Các liệu pháp quấn ứng dụng Document dựa trên hiện ném RecoverableError
trong một thông thường NSError
, vì vậy, không có điều này, tự động tạo ra NSDocumentErrorRecoveryAttempter
không hoạt động tốt.
Đừng quên sửa đổi Info.plist để chỉ định lớp này làm lớp Chính.
Xây dựng và chạy ứng dụng, sau đó khi cửa sổ tài liệu được trình bày, Tệp> Lưu ... và nhấp vào Lưu trong bảng lưu.
Bạn có thể tìm cách RecoverableError
bạn đang làm việc ...
Vì vậy, RecoverableError
rất hữu ích khi ứng dụng của bạn đã thực hiện các tính năng phục hồi chuẩn được mô tả trong Error Handling Programming Guide. Và giới thiệu nó nói rõ:
quan trọng: Lớp NSError
có sẵn trên cả OS X và iOS. Tuy nhiên, các API và các cơ chế trả lời lỗi và trả lời lỗi và các cơ chế chỉ khả dụng trong Bộ Ứng dụng (OS X).
Câu hỏi này khá hữu ích..Không có câu trả lời cho đến bây giờ..Nhận xét về tiền thưởng? –
Ý tưởng hay, bí ẩn này có vẻ giống như một viên ngọc. – TruMan1
Nếu bạn không có, tôi đã suy nghĩ để đóng góp :) –