Время действия URL от NSItemProvider - PullRequest
0 голосов
/ 08 мая 2019

Я пишу расширение для совместного использования, которое будет принимать изображения и выполнять с ними определенные действия.В методе моего 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 Ответ

1 голос
/ 08 мая 2019

Документация для loadFileRepresentation гласит:

Этот метод записывает копию данных файла во временный файл, который система удаляет при возврате обработчика завершения.

Таким образом, url действителен для закрывающей фигурной скобки обработчика завершения.

Вам необходимо скопировать файл в известное место в песочнице, прежде чем вы закончите в обработчике завершения, если вам нужен доступв файл за пределами обработчика завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...