场景
用户右键单击 Finder 中的目录并找到自定义菜单项。单击该项目将告诉我的应用程序打开一个窗口,用户可以在其中完成工作。完成后,需要将文件写入他通过右键单击选择的文件夹。
问题
我现在一切都开始工作了,除了最后一部分。扩展程序无法写入所选文件夹。
用户选择他想要与之交互的文件夹似乎不是 Powerbox 的一部分,根据我的理解,Powerbox 只能通过以下方式激活:openPanel
and savePanel
。如何获得与用户通过菜单项选择的文件夹进行交互的权限?我在开发人员库中找不到该问题的任何可能解决方案的参考。不在沙盒指南中,不在扩展指南中。
如果无法使用所选的文件和文件夹,那么添加自定义菜单项的可能性将毫无用处,因此我确信必须有一种方法来访问它们。
也许我尝试写作的方式是错误的。我的主应用程序将临时文件写入共享组文件夹中。之后,它会发送扩展程序侦听的通知:
func copyFile(notification:NSNotification)
{
NSLog("write file")
if let target = tmpTarget
{
let secureContainer = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.de.enie.Nu")
let contents = NSFileManager.defaultManager().contentsOfDirectoryAtURL(secureContainer!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles | NSDirectoryEnumerationOptions.SkipsPackageDescendants | NSDirectoryEnumerationOptions.SkipsSubdirectoryDescendants , error: nil)
for content in contents as! [NSURL]
{
NSLog("tmp data: \(content.path!)")
if content.lastPathComponent!.stringByDeletingPathExtension == "SharedData"
{
NSLog("found shared file")
NSFileManager.defaultManager().copyItemAtURL(content, toURL: target.URLByAppendingPathComponent(content.lastPathComponent!), error: nil)
NSFileManager.defaultManager().removeItemAtURL(content, error: nil)
}
}
tmpTarget = nil
}
}
尝试写入文件会导致以下控制台通知:
- 在 /Users//Desktop/SharedData.png 上打开:不允许操作
- 拒绝文件写入创建 /Users//Desktop/SharedData.png
任何如何访问用户选择的文件夹的想法都值得赞赏。
Update
我只是保证我没有犯任何错误。虽然我可以通过NSOpenPanel
(这意味着权利应该是正确的)我无法在 / 中创建文件夹,甚至无法为我的默认目标网址添加书签FIFinderSyncController
.