iOSの環境でUIDocumentInteractionControllerでファイルをシェアしようとした時にシェア用の画面は出るけど、その後エラーになってしまい保存できない問題がありました。
Could not instantiate class NSURL. Error: Error Domain=NSCocoaErrorDomain Code=4864 "The URL archive of type “public.url” contains invalid data." UserInfo={NSDebugDescription=The URL archive of type “public.url” contains invalid data.} |
上記のエラーがでた原因がよく分からなくて悩んだので解決先です。
解決策
- UIDocumentInteractionControllerのインスタンスはクラス変数で保持しておく
上記の事をしていないと、作成したUIDocumentInteractionControllerのインスタンスが開放されるのかうまく動作しません。
Googleで検索したサンプルコードをそのまま使うと、上記のパターンになっていてNGになる事があるので注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class ViewController: UIViewController { var controller: UIDocumentInteractionController ? override func viewDidLoad() { super .viewDidLoad() // Do any additional setup after loading the view. } @IBAction func onTapButton(_ sender: UIButton ) { showShareView(sender) } func showShareView(_ sender: UIView ) { guard let image = UIImage (named: "start" ) else { print( "画像ファイルを読み込めません" ) return } let data = image.pngData() // ファイル一時保存してNSURLを取得 guard let url = NSURL (fileURLWithPath: NSTemporaryDirectory ()).appendingPathComponent( "tmp.png" ) else { print( "URLを作成できません" ) return } try ! data?.write(to: url, options: .atomic) // UIDocumentInteractionControllerはクラスインスタンスで保持しておく controller = UIDocumentInteractionController (url: url) if !(controller!.presentOpenInMenu(from: sender.frame, in: view, animated: true )) { print( "ファイルに対応するアプリがありません" ) } } } |
0 件のコメント :
コメントを投稿