【问题标题】:Drag & Drop between Photos and a Sandboxed app在照片和沙盒应用程序之间拖放
【发布时间】:2017-02-23 22:32:37
【问题描述】:

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

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

即使在临时文件夹中,照片也无法在我的沙箱中写入这种逻辑。但是由于我的应用在沙盒之外无法访问,我怎样才能将文件从照片交换到我的应用???

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

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个文件(共1个) ) 导出。无法将“图像”移动到“文件夹”:要么此文件夹不存在,要么该文件夹不能被 //cut//

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

编辑更多信息

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

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

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

我没有找到摆脱这些隔离标志的方法。

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

【问题讨论】:

  • 能否贴出获取临时目录的代码?
  • 按要求添加代码

标签: cocoa drag appstore-sandbox


【解决方案1】:

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

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

【讨论】:

  • 谢谢。不幸的是,这并不能解决问题。我确实可以看到 Photo 将承诺的文件传送到 Document 文件夹。但是这张照片设置了“隔离”标志。似乎这会阻止我的应用程序读取它。这就是我在我的问题的最后编辑中试图解释的内容。我想我现在的问题应该是“如何读取隔离文件?”。
  • 你能把一个示例应用放在一起放在github上吗?
  • 感谢您的关注。是的,我会尝试这样做。不过不会在很短的时间内(可能在周末)。
【解决方案2】:

好的,我发现了问题所在。这与隔离或应用被沙盒化无关。

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

但是

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

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

感谢 catlan 推动我重新调查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多