NSURLConnection: возобновить функционал - PullRequest
1 голос
/ 01 марта 2011

Я пишу менеджер загрузок в Objective-C, и он работает с функциональностью резюме. Я записываю данные на диск по мере их получения, поэтому, если загрузка по какой-либо причине прерывается, она должна начинаться с того места, где она остановилась. Apple говорит, что вам следует ожидать одно или несколько - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response событий. В этом случае они говорят, что вы должны сбросить все данные, которые вы ранее получили, потому что ваша загрузка перенаправлена, а байты, которые вы уже получили, недействительны, поэтому я удаляю существующий файл и воссоздаю с 0 байтами. Но если я получаю это событие несколько раз, мне придется удалить данные, которые я получил ранее, в виде частичной загрузки, что противоречит цели возобновления работы. Есть ли решение для этого?

Решение, которое я нашел, состоит в следующем: сбрасывать данные только по - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response событиям, которые я получаю после первого. Это исправит большинство случаев (я бы подумал). Это логично звучит? Есть ли лучшая альтернатива? Насколько вероятна загрузка файла для запуска нескольких - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response событий?

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

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

Поиск "Возобновление" на этой странице

1 голос
/ 02 марта 2011

multipart/x-mixed-replace используется, когда сервер хочет заменить то, что он вам дал, чем-то другим. Удаление всего, что вы загрузили до сих пор, является единственно разумным вариантом, вы не можете возобновить загрузку чего-либо, когда сервер говорит вам выбросить это и использовать что-то другое.

Насколько вероятна загрузка файла для запуска множественного (недействительного) соединения: (NSURLConnection *) соединение didReceiveResponse: (NSURLResponse *) события ответа?

Крайне маловероятно. Он используется только при определенных видах потоковой передачи, а не для всего, для чего вам нужен менеджер загрузок.

0 голосов
/ 24 декабря 2012

Это хорошая и чистая библиотека, которая, как мне кажется, обладает необходимой вам функциональностью: https://github.com/Anviking/DownloadManager

...