URLSessionDownloadTask: Отказ от записване на данни

Работя върху приложение, което отнема няколко минути, за да изтегли голям файл и да го запише на диск. Клиентът ме информира, че желае да може да отмени това по всяко време. Това, което направих, е да капсулирам глобален URLSession, който ще се справи със задачата за изтегляне. След въвеждане от потребителя ще извикам invalidateAndCancel() в сесията. Открих, че методът

urlSession(_ session: URLSession, 
        downloadTask: URLSessionDownloadTask,    
        didWriteData bytesWritten: Int64, 
   totalBytesWritten: Int64, 
   totalBytesExpectedToWrite: Int64) 

не спира да бъде извикван дори след като сесията е била анулирана и отменена.

ВЪПРОС

Как да накарам този метод да спре да се изпълнява?


person Brandon A    schedule 18.04.2017    source източник


Отговори (1)


Предишна тема

Опитайте връзката по-горе, мисля, че обяснява по-добре, отколкото мога. Също Друга препратка

person Rand Richter    schedule 18.04.2017
comment
Ъмм... не. Методът invalidateAndCancel отменя всички задачи в рамките на дадена сесия (следователно отменя). Съгласно документацията, не трябва никога да получавате допълнителни делегирани повиквания, след като извикате този метод (или най-много няколко милисекунди след това, за да отчетете многонишковостта). Ако това не е това, което виждате, тогава или не отменяте правилната сесия, вашата задача не е в тази сесия, или сте открили много сериозна грешка. - person dgatwood; 26.04.2017