关于使用NSURLConnection下载文件和显示进度的问题

questions about using NSURLConnection to download files and show the progress

本文关键字:问题 显示 于使用 NSURLConnection 下载 文件      更新时间:2023-10-16

我正在尝试使用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
};

但是我得到了大量的错误告诉我,我不能在cpp中使用objective - C变量。包含'PatchDownload'类的文件是。mm我的第一个问题是,如果有任何方法使用NSURLConnection在cpp。

  1. 我的第二个问题是,我需要显示下载的进度,但当我尝试'connection: didreceiverresponse '获取正在下载的文件的总大小以计算百分比,我得到-1。我知道-1意味着'expectedLength'未定。我想问一下是否有办法显示下载进度

  2. 我的第三个问题是,如果有任何方法来控制调用"连接:didReceiveData"。例如,我希望委托每1000字节或其他特定字节调用一次。这可能吗?

非常感谢你,我真的很感激你的帮助。谢谢你

我的第一个问题是,如果有任何方法使用NSURLConnection在cpp.

使用Objective-C指针作为c++类成员应该没有问题。我的猜测是,您实际上包括在其他cpp文件中声明PatchDownload的头文件。你能检查这一点,并在必要时显示错误消息(其中一些)吗?

我想问一下是否有办法显示下载进度

如果服务器没有指定下载长度,我担心没有办法显示从0%到100%的进度。你可以做的是显示一个通用的进度,就像一个纺车,当信息没有提供。当然,如果你有访问服务器的权限,你可以解决这个问题。

我的第三个问题是,如果有任何方法来控制'connection:didReceiveData'的调用。

很遗憾,我不这么认为。你应该使用较低级别的api,比如CFStream,它允许定义缓冲区大小。