Приложение Swift 4 вылетает при открытии файла из icloud - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблема с тем, что мое приложение падает при открытии файла из iCloud.Если я открою этот файл из моего приложения с помощью Document Picker , все будет хорошо.Но если я пытаюсь открыть приложение извне, например, из iCloud или загрузить safari, оно вылетает.Если я открою его из локального хранилища "мой iphone", он тоже работает.Это интересно, потому что это было хорошо неделю назад:)

Итак, в AppDelegate я реализовал следующий метод:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {}

В соответствии с журналами происходит сбой, потому что файл делаетне существует.

file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Desktop/twic1121.pgn

Это результат, если я печатаю URL из параметра.Я думаю, это означает, что файл там.

Но если я сделаю это: print(fm.fileExists(atPath: url.path)), тогда это будет false .

Так что очевидно, что после let dataFromFile = fm.contents(atPath: url.path) это ноль .

Я понятия не имею, в чем здесь может быть проблема.Итак, реальный вопрос здесь, почему это ноль?

1 Ответ

0 голосов
/ 21 ноября 2018

Похоже, что ошибкой могут быть многие вещи, не связанные ни с классом, к которому вы применяете код (AppDelegate), ни с методами, которые вы вызываете.

Я предполагаю, что URL-адрес, по которому вы звоните, построен неправильно (не указывает на правильный объект, на который вы пытаетесь указать).По многим причинам.

Убедитесь, что одна из этих причин устранила вашу проблему:

(1) В конце URL-адреса, по которому вы звоните, был указан суффикс "pgn".Если вы хотите загрузить картинку, возможно, суффикс неверный.В этом случае это мог быть какой-то известный и поддерживаемый формат, например "png", "jpeg" или "jpg".

(2) Символ "% 20" в серединеваш код также поднимает флаг.Не похоже на правильный объект URL swift.Возможно, используемый вами URL-адрес представлен неверно.

(3) com ~ apple ~ CloudDocs также поднимает флаг, поскольку вряд ли в нем будет символ "~"URL передан.Это также настоятельно говорит о том, что, возможно, используемый вами URL-адрес представлен неверно.

Я думаю, что ваш URL-адрес не указывает на то, на что вы пытаетесь указать, что приводит кМетод «действительно существует» возвращает false, и загрузка приводит к nil.

Если все это не решает вашу проблему, опубликуйте более подробную информацию о коде. Особенно, какой метод вы вызываете для создания / создания этого объекта URL, который вы используете, который указывает на: file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Desktop/twic1121.pgn

...