拖拽在照片和沙盒应用之间删除

时间:2017-02-23 22:32:38

标签: cocoa drag appstore-sandbox

我有一个沙盒应用。我希望用户能够将照片应用中的照片拖到我的沙盒应用中。

我写了所有处理"承诺文件的代码"使用非沙盒应用程序时,从照片没有问题。但是使用我的沙盒应用程序,照片告诉我它无权将图片文件写入目标文件夹...这是我的沙盒应用程序中的临时文件夹。

即使在临时文件夹中,照片也无法在我的沙箱中写入。但由于我的应用程序无法访问沙箱,我如何将文件从照片交换到我的应用程序

编辑以根据请求提供一些代码

NSString   *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[[NSUUID UUID] UUIDString]] ;
NSError    *error    = nil ;
[[NSFileManager defaultManager] createDirectoryAtPath:tempPath
                          withIntermediateDirectories:NO
                                           attributes:nil
                                                error:&error] ;
filenames = [sender namesOfPromisedFilesDroppedAtDestination:[NSURL fileURLWithPath:tempPath]] ;

(文件名是全局变量NSArray)

照片显示的错误消息(SOrry,图片是法语,但消息并不真实,因为它无法完全显示。显示的部分显示为&#34 ; 0文件(1个)已导出。无法移动"图像"到"文件夹":此文件夹不存在,或文件夹无法被剪切//

我当然检查过该文件夹确实存在。

enter image description here

使用更多信息进行修改

我想我找到了一条调查路径:

  • 当我在临时文件夹中创建唯一文件夹时,它会获得一个"隔离区"旗。我检查了使用终端和" ls -l",我们可以看到" @"权限之后。现在,如果我没有创建唯一文件夹,则照片可以将文件直接放在临时文件夹中。因此问题是照片无法使用"隔离的"文件夹中。

  • 现在这还没有用。无论如何,丢弃图片文件也设置了隔离标志,我的应用程序无法读取它!

我发现没办法摆脱那些隔离标志。

最奇怪的是,如果我只是一步一步地使用调试器,一切正常。

2 个答案:

答案 0 :(得分:1)

Sandbox将允许文件承诺提供程序应用程序写入Document文件夹。

[[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];

答案 1 :(得分:1)

好的,我发现了什么问题。它与隔离或应用沙盒无关。

实际上,当调用namesOfPromisedFilesDroppedAtDestination:时,提供者应用程序(在我的情况下为Photos)开始在临时文件夹中写入文件。这可能需要一些时间。因此,我开始监视目标文件夹中的事件,并且仅对第一个事件做出反应。 (请查看:How can my OS X app accept drag-and-drop of picture files from Photos.app?)。

BUT

照片应用程序分几个步骤发送文件。第一步创建一个临时文件,稍后将其重命名为“正确”的图像文件。这个临时文件的创建是我的应用程序捕获的事件。我的应用程序然后检查图像文件是否存在,但它还没有。

因此,解决方案是继续检查文件夹事件,直到承诺的文件确实存在。如果还没有,那么继续等待。希望有希望的应用程序有一天会实现它的承诺。

感谢catlan推动我重新调查。