【发布时间】:2021-12-23 10:37:27
【问题描述】:
当将图像从 Photos 应用程序放入我的自定义应用程序时,- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id<UIDropSession>)session 我收到一个 NSURL*,其 [url absoluteString] 采用以下形式:
file:///var/tmp/com.apple.DragUI.druid/.com.apple.DragUI.4tyFQQ/version=1&uuid=FF693BFB-99FF-4790-BBF2-A226593F718D&mode=compatible.png
每当我尝试使用此文件路径时,都会收到 The file couldn’t be opened because there is no such file 错误。这是有道理的,因为路径本身看起来不正常。我看到 other implementations 表明这些可能应该采用更符合预期的路径格式。
万一读取问题与访问权限相关,我可以成功地包装操作:
BOOL success = [url startAccessingSecurityScopedResource] /* begin */;
// ...
if (success) {
[url stopAccessingSecurityScopedResource] /* terminate */;
}
但这不会影响响应数据。该应用程序目前还可以在拖放之外的其他用户旅程中成功读取和写入图片库,因此在我看来这与缺少权限无关。
相比之下,我可以处理从 Brave 浏览器通过 performDrop 传递的 NSConcreteData 类型而不会出错。
有人知道发生了什么吗?有什么方法可以规范化这个提供的 URI,以便我可以正确解析文件,或者它可能表示错误的应用程序状态?
我在物理 iPad 上运行 iOS 14。
【问题讨论】:
标签: ios objective-c drag-and-drop