2017-02-23 26 views
1

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

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

这种照片无法在我的沙盒中写入,即使在临时文件夹中也是如此。但由于我的应用程序无法访问沙箱外,我如何才能将照片中的文件交换到我的应用程序?

编辑提供一些代码作为每个请求

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 file(out of 1)”导出,不能将“image”移动到“folder”:这个文件夹不存在,或该文件夹不能被//切割//

我当然确认该文件夹确实存在。

enter image description here

编辑一些更多的信息

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

  • 当我创建的临时文件夹中唯一的文件夹,它得到了“检疫“标志。我检查了使用终端和“ls -l”,在权限后可以看到“@”。现在,如果我不创建唯一文件夹,照片可以直接将文件放到临时文件夹中。因此,问题是照片无法使用“隔离”文件夹。

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

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

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

+0

你可以发布代码如何获得临时目录吗? –

+0

根据要求添加代码 –

回答

1

好的,我发现有什么问题。它与隔离区或应用程序被装箱无关。

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

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

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

感谢catlan推动我重新调查。

1

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

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

谢谢。不幸的是,这并不能解决问题。我确实可以看到照片将承诺的文件传递到Document文件夹。但这张照片有“隔离”标志设置。这似乎阻止我的应用程序阅读它。这就是我在我的问题的最后编辑中试图解释的内容。我想我的问题现在应该是“我怎样才能读取被隔离的文件?”。 –

+0

你可以把一个示例应用程序放在一起,并把它放在github上? – catlan

+0

感谢您的关注。是的,我会尽力做到这一点。尽管不是在很短的时间内(可能在周末)。 –