我有一个沙箱应用程序。我希望用户能够将图片从Photos应用程序拖到我的沙箱应用程序中。
我写了所有的代码,以处理“承诺的文件”,从照片没有问题时,使用它与一个非沙箱应用程序。但是对于我的沙箱应用程序,Photos告诉我它无权在目标文件夹中写入图片文件.这是我的沙箱应用程序中的临时文件夹。
这是一种逻辑,照片不能写在我的沙箱,甚至在临时文件夹。但是,由于我的应用程序在沙箱之外没有访问权限,我如何将文件从Photos交换到我的应用程序?
编辑,根据请求提供一些代码
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,图片是法语的,但这条信息并不是真正有用的,因为它不能完全显示。显示的部分显示"0文件(在1中)导出。不可能将“图像”移动到“文件夹”:要么该文件夹不存在,要么该文件夹不能//剪切//
当然,我检查了文件夹是否存在。

提供更多信息的编辑
我想我找到了一条调查路径:
我没有办法摆脱那些隔离旗。
最奇怪的是,如果我一步一步地使用调试器,一切都很好。
发布于 2017-03-08 21:37:39
好吧,我发现出了什么问题。它与隔离或应用程序沙箱无关。
实际上,当调用namesOfPromisedFilesDroppedAtDestination:时,提供者应用程序(在我的例子中是Photos)开始在临时文件夹中写入文件。这可能需要一些时间。因此,我开始监视目标文件夹中的事件,并对第一个事件(仅为)进行响应。(查看这个:How can my OS X app accept drag-and-drop of picture files from Photos.app?)。
但
Photos应用程序分几个步骤发送这些文件。第一步创建一个临时文件,该文件后来被重命名为“正确”图像文件。创建临时文件是我的应用程序捕获的事件。当时我的应用程序正在检查图像文件是否存在,但它还没有出现。
因此,解决方案是继续检查文件夹事件,直到承诺的文件真正存在为止。如果还没有,那就继续等待。希望这款有前途的应用有一天能实现它的承诺。
感谢凯特兰逼我重新调查。
发布于 2017-03-07 20:32:30
Sandbox将允许文件承诺提供者应用程序写入文档文件夹。
[[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];https://stackoverflow.com/questions/42427455
复制相似问题