Что произошло после прекращения загрузки NKIssue из-за недоступности сети? - PullRequest
1 голос
/ 08 марта 2012

У меня есть приложение NewsStand, где, когда пользователь нажимает на кнопку загрузки, мы загружаем проблему, используя

[nkAssetDownload downloadWithDelegate: self];

Теперь между загрузкой предположим сетьразъединяет, NSURLConnection вызывает didFailWithError: (NSError *) метод ошибки.Я сообщаю об этом пользователю с предупреждением и обновляю пользовательский интерфейс, чтобы кнопка загрузки была включена.Теперь, когда пользователь нажимает на кнопку «скачать», я проверяю на

if (nkIssue.downloadingAssets.count == 1) {снова начинаю загрузку с [nkIssue.downloadingAssets objectAtIndex: 0];} else {начать загрузку с nkAssetDownload = [nkIssue addAssetWithRequest: urlRequest];}

У меня есть несколько вопросов об этом

1) Почему я всегда получаю nkIssue.downloadingAssets.count == 0, когда пользователь снова нажимает кнопку «скачать»?Разве это не проблема 1, которая все еще должна быть в очереди загрузки iOS?

2) После того, как пользователь снова нажмет «загрузить», проблема должна продолжить загрузку с той же позиции, верно?Я не всегда наблюдаю это поведение, иногда оно начинает загружаться со старта (вздох).

Хотя, если я закрываю приложение, удаляю его из памяти (дважды нажмите кнопку «Домой», долго нажимаю значок приложения и удаляю его) и снова запускаю, я получаю [nkLib downloadAssets] .count == 1 в «didFinishLaunchingWithOptions» имоя проблема возобновляется загрузка.

Каждый аспект новостного материала не четко документирован Apple.

1 Ответ

1 голос
/ 21 марта 2012

У меня есть две теории, если вы хотите продолжить исследование, и у вас нет идей получше:

  1. Я удивлен, что вызовы NSURLConnection didFailWithError. Я ожидал, что загрузочный ресурс останется в downloadAssets и будет автоматически повторен позже. Моя теория на это: Метод didFailWithError является необязательным, и Newsstand Kit ведет себя по-разному в зависимости от того, реализуете этот метод или нет. NSURLConnection может проверить, что делегат отвечает на метод, чтобы принять это решение. Если вы реализуете метод, и возникает ошибка сети, об ошибке сообщается с помощью метода didFailWithError. После завершения этого метода загружаемый актив будет удален из библиотеки. Если вы не реализуете метод, загрузка не завершится неудачей, и любые ошибки будут обработаны газетным киоском: загружаемый ресурс останется в очереди и будет повторяться до бесконечности (что касается вашего программного обеспечения, загрузка никогда не завершится неудачей). ).

  2. Если загрузка завершается неудачно (или завершается), вас информирует метод обратного вызова делегата didFailWithError (или connectionDidFinishDownloading). Загружаемый актив, вероятно, не будет удален из downloadAssets, пока этот метод не завершится. Если вы представляете предупреждение во время метода, актив не будет там, когда пользователь снова нажмет кнопку «Загрузить».

...