вопросы по использованию NSURLConnection для загрузки файлов и отображения прогресса - PullRequest
1 голос
/ 05 августа 2011

Я пытаюсь загрузить файлы с помощью NSURLConnection и показать ход загрузки.

Но у меня есть некоторые ограничения и я хотел бы спросить, есть ли способ решить эту проблему.

  1. мой файл должен быть скомпилирован в файл cpp. например, я написал этот интерфейс для использования NSURLConnection

    @interface DownloadUtil : NSObject
    <NSURLProtocolClient     
    {
        NSMutableData* receivedData;
        NSURLConnection* theConnection;
        long long dataDownloaded;
        long long totalDataSize;
    }
    @property (nonatomic, retain) NSData* receivedData;
    @property (nonatomic) long long dataDownloaded;
    

Но как мне использовать этот интерфейс в файле cpp? Я изначально пробовал вот так

class PatchDownload{
   public:
   PatchDownload();
   ~PatchDownload();
   void downloadFile(char* url);
   DownloadUtil* downloadUtil; //has all implementation of all downloading process
};

Но я получаю массу ошибок, говорящих мне, что я могу 'использовать объективные переменные C в cpp. и файл, который содержит класс 'PatchDownload', является .mm Мой первый вопрос: если есть какой-либо способ использовать NSURLConnection в cpp.

  1. Мой второй вопрос: мне нужно показать ход загрузки, но когда я пытался 'connection: didReceiveResponse', чтобы получить общий размер загружаемого файла и рассчитать процент, я получил -1. Я знаю, что -1 означает, что «Ожидаемая длина» не определена. Я хотел бы спросить, есть ли способ показать прогресс загрузки

  2. Мой третий вопрос: если есть возможность контролировать вызов 'Подключение: didReceiveData. Например, я хочу, чтобы этот делегат вызывался каждые 1000 байтов или другие конкретные байты. Возможно ли это сделать?

Большое спасибо, и я очень ценю вашу помощь. Спасибо

1 Ответ

1 голос
/ 05 августа 2011

Мой первый вопрос: если есть какой-нибудь способ использовать NSURLConnection в cpp.

Не должно быть проблем с наличием указателя Objective C в качестве члена класса C ++. Я предполагаю, что вы на самом деле включаете заголовочный файл, где вы объявляете PatchDownload в каком-то другом файле cpp. Не могли бы вы проверить это и при необходимости показать сообщения об ошибках (некоторые из них)?

Я хотел бы спросить, есть ли способ показать прогресс загрузки

Если сервер не указывает продолжительность загрузки, я боюсь, что нет способа показать прогресс, который идет от 0% до 100%. Что вы можете сделать, это показать общий прогресс, как вращающееся колесо, когда эта информация не предоставляется. Конечно, если бы у вас был доступ к серверу, вы могли бы это исправить.

Мой третий вопрос: если так или иначе, есть возможность контролировать вызов 'connection: didReceiveData'.

К сожалению, я так не думаю. Вы должны использовать API нижнего уровня, например CFStream , который позволяет определить размер буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...