В приложении для iPad, над которым я работаю, я создаю изображения в формате png, которые должны быть сохранены или предоставлены для совместного использования с помощью UIDocumentInteractionController
.
Каждый вариант работает хорошо, но один. В случае, если размер файла png превышает 20 МБ, функция AirDrop завершается ошибкой, а всплывающее окно UIDocumentInteractionController
завершается iOS с ошибкой:
viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
Приложение продолжает работать, и я все еще могу его использовать.
В этом случае, когда файл png большой, все остальные параметры «Поделиться / Открыть в ...» работают хорошо. Не работает только функция совместного использования AirDrop.
Это происходит почти сразу после нажатия на человека / устройство, чтобы поделиться им. Таким образом, не может возникнуть проблема с памятью. Я также не уверен в этом, поскольку работаю над iPad Pro 2018 с 6 ГБ ОЗУ.
В моих тестах большинство сгенерированных файлов занимают около 100 МБ, что не так много по сравнению с тем, что мы можем передать с помощью AirDrop из приложений Apple. Например, я перенес файлы размером более 300 МБ из приложения Files
с помощью AirDrop.
Обратите внимание, что я не знаю правильного предельного значения, но я чувствую (!), Что оно находится в области 20 МБ. Я без проблем пробовал файлы размером до 10 МБ.
Я также пытался использовать UIActivityViewController
и получил то же самое поведение. Я попробовал это с тремя способами установки элементов для обмена:
- Установка URL-адреса png-файла в качестве элемента
- Загрузка данных png в объект
Data
и установка этого объекта данных в качестве элемента
- Загрузка данных png в
UIImage
и установка этого изображения в качестве элемента
Вот код, который я использую для представления documentController:
func presentDocumentInteractionController(for fileUrl: URL) {
documentController = UIDocumentInteractionController(url: fileUrl)
documentController!.delegate = self
documentController!.uti = String(kUTTypePNG)
documentController!.name = fileUrl.lastPathComponent
documentController!.presentOptionsMenu(from: shareBarButtonItem, animated: true)
}
Var documentController
является членом моего класса, чтобы избежать его удаления после завершения функции, а затем избежать сбоя приложения при значении nil.
Я понятия не имею, кроме подачи радара в Apple.
Кто-нибудь сталкивался с таким поведением?