Проблемы с фоновой URLSession с идентификатором

Я попробовал этот код в своем проекте для загрузки больших файлов в фоновом режиме, и он отлично работает. Я начинаю загрузку в UIViewController. Если я перейду к другому представлению и вернусь к UIViewController, он перестанет перезагружать индикатор выполнения.

У меня возникли проблемы с фоновой URL-сессией с идентификатором, который уже существует!. Я хочу создавать новый сеанс каждый раз при загрузке UIViewController. Я хочу аннулировать весь фоновый сеанс при отклонении контроллера представления. Я испробовал все возможности, чтобы решить эту проблему, но не добился успеха.

Нажмите здесь


person APanchal    schedule 10.05.2016    source источник


Ответы (1)


Когда вы создаете фоновый сеанс, вы делаете две вещи:

  • Указание nsurlsessiond (фоновому демону) создать сеанс.
  • Создание локального сеанса в вашем приложении, который подключен к этому сеансу.

Назначение идентификатора — позволить вашему приложению повторно подключиться к внешнему сеансу (управляемому nsurlsessiond), если ваше приложение будет завершено операционной системой.

Насколько мне известно, обычно ваше приложение не может добровольно отделить свой сеанс от фонового сеанса. Поэтому, когда ваше приложение пытается создать сеанс с одним и тем же идентификатором, внезапно появляются два сеанса, которые пытаются общаться с одним и тем же внешним сеансом в nsurlsessiond, и все идет очень неправильно. Это не поддерживаемый способ использования API.

Объект фонового сеанса должен оставаться активным на протяжении всего времени работы вашего приложения. Не пытайтесь избавиться от него и воссоздать его за один запуск. Вы никогда не должны создавать сеанс с тем же идентификатором, если только ваше приложение не будет перезапущено.

Обратите внимание, однако, что если ваше приложение перезапускается для обработки фоновых событий (только для iOS), когда вы вызываете обработчик завершения, предоставленный событием, локальный сеанс вашего приложения становится недействительным, и вам нужно создать его, если ваше приложение делает что-либо после тот. Это единственная известная мне ситуация, когда фоновый сеанс перестает быть связанным с фоновым сеансом в nsurlsessiond, и, таким образом, это единственная ситуация, когда вы должны когда-либо создавать сеанс с одним и тем же идентификатором дважды за один запуск (один раз, когда вы вас попросят обработать фоновые события, а затем, возможно, снова, когда вы получите вызов didFinishLaunching, указывающий, что пользователь активизировал ваше приложение).

person dgatwood    schedule 03.08.2016
comment
Спасибо. Я пытаюсь. :-) - person dgatwood; 14.08.2016