我有一个沙盒应用。我希望用户能够将照片应用中的照片拖到我的沙盒应用中。
我写了所有处理"承诺文件的代码"使用非沙盒应用程序时,从照片没有问题。但是使用我的沙盒应用程序,照片告诉我它无权将图片文件写入目标文件夹...这是我的沙盒应用程序中的临时文件夹。
即使在临时文件夹中,照片也无法在我的沙箱中写入。但由于我的应用程序无法访问沙箱,我如何将文件从照片交换到我的应用程序
编辑以根据请求提供一些代码
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个)已导出。无法移动"图像"到"文件夹":此文件夹不存在,或文件夹无法被剪切//
我当然检查过该文件夹确实存在。
使用更多信息进行修改
我想我找到了一条调查路径:
当我在临时文件夹中创建唯一文件夹时,它会获得一个"隔离区"旗。我检查了使用终端和" ls -l",我们可以看到" @"权限之后。现在,如果我没有创建唯一文件夹,则照片可以将文件直接放在临时文件夹中。因此问题是照片无法使用"隔离的"文件夹中。
现在这还没有用。无论如何,丢弃图片文件也设置了隔离标志,我的应用程序无法读取它!
我发现没办法摆脱那些隔离标志。
最奇怪的是,如果我只是一步一步地使用调试器,一切正常。
答案 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推动我重新调查。