在照片和沙盒应用程序之间拖放

Drag & Drop between Photos and a Sandboxed app

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

我编写了所有用于处理来自照片的 "promised file" 的代码,在与非沙盒应用程序一起使用时没有问题。但是对于我的沙盒应用程序,照片告诉我它无权将图片文件写入目标文件夹...这是我的沙盒应用程序中的临时文件夹。

即使在临时文件夹中,照片也不能写入我的沙箱,这是合乎逻辑的。但是由于我的应用程序无法访问沙箱之外的内容,我该如何将文件从照片交换到我的应用程序???

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

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)

还有照片显示的错误消息(对不起,图片是法语的,但消息并不是很有用,因为它无法完全显示。显示的部分显示“0 文件(out of 1) exported.Impossible to move "image" to "folder" : 要么这个文件夹不存在,要么文件夹不能被 //cut//

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

编辑更多信息

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

我找不到摆脱那些隔离标志的方法。

最奇怪的是,如果我只是一步一步地使用调试器,一切都运行良好。

沙盒将允许文件承诺提供程序应用程序写入文档文件夹。

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

好的,我发现哪里不对了。它与隔离或应用程序被沙盒无关。

事实上,当调用 namesOfPromisedFilesDroppedAtDestination: 时,提供程序应用程序(在我的例子中是照片)开始在临时文件夹中写入文件。这可能需要一些时间。因此,我开始监视目标文件夹中的事件,并且 仅对第一个事件做出反应 。 (检查这个:)。

但是

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

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

感谢 catlan 推动我重新调查。