"Handle any errors that occur while processing the action."
액션 프로세싱 동안 발생하는 모든 에러를 처리합니다.
가능하다면 로컬 액션이 성공할 수 있도록 하는 방법으로 에러를 처리하시기 바랍니다. 만약 로컬 액션이 성공할 수 있다면 컴플리션 핸들러의 에러 속성에 nil
을 전달합니다. 그리고 모든 불일치를 수정합니다.
그러나 복구 불가능한 에러가 발생하면 로컬 변경사항을 만들지 않아야 합니다. 대신 문제를 설명하는 에러 객체를 생성하고 컴플리션 핸들러에 전달해야 합니다. 일반적으로 이 에러는 사용자에게 제시되고, 액션은 취소됩니다.
아래 섹션은 특정 에러 타입에 응답하는 전략들을 설명하고 있습니다.
아이템을 로컬로 업데이트하고 uploadingError
속성을 설정해서 서버에 대한 변경사항 업로딩이 이뤄지는 동안 발생한 모든 에러(NSFileProviderError.Code.insufficientQuota
에러와 같은)를 처리하시기 바랍니다. 업로드 에러는 로컬 변경을 방지하지 않아야 합니다. 대신 에러가 해결된 후 변경사항 싱크를 다시 시도하시기 바랍니다.
인증 에러의 경우 파일 제공자 UI 프레임워크를 사용해서 커스텀 UI를 제공할 수 있습니다. 더 많은 정보는 FPUIActionExtensionViewController
클래스의 prepare(forError:)
를 살펴보시기 바랍니다.
FPUIActionExtensionViewController
https://developer.apple.com/documentation/fileproviderui/fpuiactionextensionviewcontroller
서버와 로컬 아이템을 싱크할 때 이름 충돌이 발생하면, 고유한 파일명을 주면서 로컬 아이템을 업데이트해야 합니다. 이름 충돌은 에러로 간주되지 않습니다.
그러나 만약 로컬에서 이름 충돌을 감지할 수 있다면, NSFileProviderError.Code.filenameCollision
에러를 생성하기 위해 fileProviderErrorForCollision(with:)
메소드를 호출하고, 이 에러를 컴플리션 핸들러에 전달하시기 바랍니다. 그러면 시스템은 기존 이름을 교체할 것인지 사용자에게 묻습니다(allowsTrashing
과 allowsDeleting
기능을 고려하면서).
파일시스템 혹은 파일 제공자가 case-sensitive 이름을 허용하고 있을지라도 case-insensitive 비교를 사용해서 모든 충돌 확인을 수행하시기 바랍니다.