У меня есть приложение, использующее фоновые загрузки с новыми NSURLSession
API. Когда загрузка отменяется или завершается сбоем таким образом, что предоставляется NSURLSessionDownloadTaskResumeData
, я сохраняю большой двоичный объект данных, чтобы его можно было возобновить позже. Очень небольшое количество времени я замечаю сбой в дикой природе:
Fatal Exception: NSInvalidArgumentException
Invalid resume data for background download. Background downloads must use http or https and must download to an accessible file.
Ошибка возникает здесь, где resumeData
— это большой двоичный объект NSData
, а session
— экземпляр NSURLSession
:
if (resumeData) {
downloadTask = [session downloadTaskWithResumeData:resumeData];
...
Данные предоставляются API-интерфейсами Apple, сериализуются, а затем десериализуются в более поздний момент времени. Он может быть поврежден, но никогда не равен нулю (как проверяет оператор if).
Как я могу заранее проверить, что resumeData
недействителен, чтобы не допустить сбоя приложения?