来自NSItemProvider的URL的有效时间

时间:2019-05-07 23:27:11

标签: swift uikit

我正在编写一个共享扩展程序,它将接受图像并对其执行一些操作。在我的UIViewController子类的方法中,可以通过编写以下代码来访问URL的文件的特定表示形式:

guard let context = self.extensionContext else {
    return
}
guard let items = context.inputItems as? [NSExtensionItem] else {
    return
}

for item in items {
    guard let attachments = item.attachments else {
        continue
    }

    for attachment in attachments {
        guard attachment.hasItemConformingToTypeIdentifier("public.jpeg") else {
            continue
        }
        attachment.loadFileRepresentation(forTypeIdentifier: "public.jpeg") { (url, error) in
            if let url = url {
                // How long is this "url" valid?
            }
        }
    }
}

在传递给loadFileRepresentation(forTypeIdentifier:completionHandler:)的代码块中,为我提供了文件的URL,在本例中为JPEG。我可以假设有关此URL有效期有多长时间吗?具体来说,将URL本身写入某些共享存储区是否安全,以便我的应用程序以后可以访问指向的文件?还是应该假设该URL是短暂的,并且如果我想访问它所指向的文件,我应该在此代码块中制作该文件的副本吗?

1 个答案:

答案 0 :(得分:1)

loadFileRepresentation的文档说明:

  

此方法将文件数据的副本写入临时文件,系统会在完成处理程序返回时将其删除。

因此url对完成处理程序的右大括号有效。

如果您需要在完成处理程序之外访问文件,则需要在完成处理程序中完成操作之前,将文件复制到具有沙箱的已知位置。