CatHand Blog

アプリ開発やMac弄り

Mac Catalystで保存先を選択する

macNSSavePanelNSOpenPanel に対応するのは UIDocumentPickerViewController です。

let vc = UIDocumentPickerViewController(documentTypes: [kUTTypeFolder as String], in: .open)
vc.delegate = self
present(vc, animated: true, completion: nil)

みたいなコードで NSSavePanel のシートがウインドウから表示されます。何か保存するためにフォルダを選択させたいときは↑のように documentTypes: [kUTTypeFolder as String], in: .open を指定したらいいみたい。

シートが完了すると delegate で保存先のフォルダの URL が取得できます。

ここからは sandbox 対応の話ですが、後でアクセスできるように URL を UserDefaults 等に保存する時は

let data = try url.bookmarkData()

等として bookmark data を保存します。

読み出す時は

var isSlate = false
let url = try URL(resolvingBookmarkData: data, bookmarkDataIsStale: &isSlate)

のようにすると bookmark data から url を取得できます。