2017-10-21 122 views
0

我想通過NSOpemPanel將一些文件複製到指定的文件夾。 源文件正在讀取XML並顯示在NSTable中列出。我想在沒有NSOpenPanel的沙箱中複製文件

我可以通過copyItemAtPath複製文件。 但現在我的應用程序將轉向沙箱,然後我無法通過copyItemAtURL複製文件。

如何以沙盒模式複製文件?

我被看了很多帖子。我認爲安全範圍書籤可能是解決方案。 但是我不能從路徑中的XML創建「安全範圍書籤」(路徑已轉換爲NSURL就緒)。 我正在設置爲sandbox.entitlements,但尚不清楚這個問題。

這有什麼辦法嗎?

在macOS10.12和Xcode8.3.3

開發

感謝

+0

是什麼「但是我不能創建‘安全範圍的書籤’從XML路徑內(路徑爲皈依的NSURL準備)。」意思?看起來你完全理解安全範圍書籤是什麼。你想要的東西不清楚幾個奇怪的英語表達,沒有意義。展示你的工作。 –

回答

2

如何複製在沙​​盒模式的文件嗎?

目前尚不清楚你當前的代碼是幹什麼的,但沙箱下的規則很簡單:要讀取或寫入位於應用程序本身的容器(這是在庫文件夾下隱藏起來)你的應用程序之外的文件必須:

  • 使用NSOpenPanel從用戶獲取文件路徑的URL;或
  • 使用NSOpenPanel可以從用戶獲取該文件的其中一個祖先文件夾的URL。

第二個選項允許訪問整個文件夾,包括任何子文件夾;即根文件夾中的整個文件/文件夾子樹。

正如你想複製「一些文件」,這聽起來像是要求用戶對文件夾的權限是適當的。您可以將NSOpenPanel自定義爲「請求許可」對話框。如果您正在請求特定的文件夾,您也可以在其包含的文件夾中打開對話框,並且僅啓用特定的文件夾供用戶選擇。

NSOpenPanel獲得文件夾的URL後,您可以爲其創建安全範圍書籤並將其保存在應用的首選項或其他配置文件(存儲在應用的容器中)中。這樣做可以使您的應用程序在後續執行中重新獲得對該文件夾的訪問權限,而無需再次詢問用戶。

如果在調查此問題並編寫一些代碼後,您遇到問題,請提出一個新問題,顯示您的代碼並解釋問題。有人會毫無疑問地幫助你進行下一步。

HTH