有关使用NSURLConnection下载文件并显示进度的问题

时间:2011-08-05 08:43:37

标签: iphone c++ objective-c ios4

我正在尝试使用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;
    
  2. 但是如何在cpp文件中使用此界面?我最初尝试过这样的

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

    但是我收到很多错误告诉我我可以'在cpp中使用目标C变量。 包含'PatchDownload'类的文件是.mm 我的第一个问题是,如果有任何方法在cpp中使用NSURLConnection。

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

    2. 我的第三个问题是,如果无论如何都要控制召唤 '连接:didReceiveData'。例如,我希望每1000个字节或其他特定字节调用该委托。是否可以这样做?

    3. 非常感谢,非常感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

  

我的第一个问题是,如果有任何方法可以在cpp。

中使用NSURLConnection

将Objective-C指针作为C ++类成员应该没有问题。我的猜测是你实际上包含了在其他cpp文件中声明PatchDownload的头文件。你能检查一下吗?如果有必要,可以显示错误信息(其中一些)?

  

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

如果服务器没有指定下载长度,我担心没有办法显示从0%到100%的进度。您可以做的是显示通用进度,如未提供该信息时的旋转轮。当然,如果您有权访问服务器,则可以解决此问题。

  

我的第三个问题是,如果无论如何都要控制'connection:didReceiveData'的调用。

不幸的是我不这么认为。您应该使用较低级别的api,例如CFStream,它允许定义缓冲区大小。