You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 14 iPad从Photos拖拽图片到自定义App返回无效路径如何解决

iOS 14 iPad端Photos应用拖拽图片读取失败问题解答

问题成因

  • 你获取到的带version、uuid参数的URL是iOS DragUI系统生成的临时标识URL,并非实际存储在磁盘中的标准文件路径,系统解析该URL时会将拼接的参数识别为文件名的一部分,自然无法匹配到实际文件
  • 该类DragUI生成的临时文件生命周期极短,默认会在拖拽会话结束前就被系统回收,等到执行performDrop回调时临时文件已经被清理,即使拿到标准路径也无法读取
  • startAccessingSecurityScopedResource仅对符合安全域规则的外部资源URL生效,这类系统内部拖拽生成的临时标识URL不支持该接口的权限申请,调用后也不会生效
  • 从Brave浏览器拖拽正常是因为浏览器直接传递了NSConcreteData类型的实体数据,没有依赖临时URL引用,所以不存在生命周期问题

修复方案

不要直接读取拖拽获取到的NSURL对应的文件,通过NSItemProvider加载图片实体数据是最稳定的实现方式,示例代码如下:

- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id<UIDropSession>)session {
    for (UIDropItem *item in session.items) {
        NSItemProvider *provider = item.itemProvider;
        if ([provider conformsToTypeIdentifier:(NSString *)kUTTypeImage]) {
            // 方式1:直接加载UIImage对象
            [provider loadObjectOfClass:[UIImage class] completionHandler:^(id<NSItemProviderReading>  _Nullable object, NSError * _Nullable error) {
                if (object && [object isKindOfClass:[UIImage class]]) {
                    UIImage *dragImage = (UIImage *)object;
                    // 在此处处理拿到的图片
                }
            }];
            
            // 方式2:加载图片原始Data,可自行写入沙盒存储
            [provider loadDataRepresentationForTypeIdentifier:(NSString *)kUTTypeImage completionHandler:^(NSData * _Nullable data, NSError * _Nullable error) {
                if (data) {
                    // 可写入沙盒Tmp/Documents目录后再做后续处理
                    NSString *tmpPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", [NSUUID UUID].UUIDString]];
                    [data writeToFile:tmpPath atomically:YES];
                    NSURL *localUrl = [NSURL fileURLWithPath:tmpPath];
                    // 处理本地沙盒的URL,无权限和生命周期问题
                }
            }];
        }
    }
}

注意:使用kUTTypeImage需要先导入MobileCoreServices框架
如果有必须通过URL处理图片的需求,将加载到的图片数据写入自身应用沙盒目录后生成的本地URL,不会出现找不到文件的问题。


内容的提问来源于stack exchange,提问作者Mapsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:03