我正在尝试使用NSURLConnection下载文件并显示下载进度。
但我有一些限制,想问一下是否有办法解决这个问题。
我的文件需要在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中使用目标C变量。 包含'PatchDownload'类的文件是.mm 我的第一个问题是,如果有任何方法在cpp中使用NSURLConnection。
我的第二个问题是我需要显示下载的进度,但是当我尝试时 'connection:didReceiveResponse'获取正在下载的文件的总大小以计算百分比,我得到-1。我知道-1表示'expectedLength'未确定。我想问一下是否有办法显示下载进度
我的第三个问题是,如果无论如何都要控制召唤 '连接:didReceiveData'。例如,我希望每1000个字节或其他特定字节调用该委托。是否可以这样做?
非常感谢,非常感谢您的帮助。 谢谢
答案 0 :(得分:1)
我的第一个问题是,如果有任何方法可以在cpp。
中使用NSURLConnection
将Objective-C指针作为C ++类成员应该没有问题。我的猜测是你实际上包含了在其他cpp文件中声明PatchDownload
的头文件。你能检查一下吗?如果有必要,可以显示错误信息(其中一些)?
我想问一下是否有办法显示下载进度
如果服务器没有指定下载长度,我担心没有办法显示从0%到100%的进度。您可以做的是显示通用进度,如未提供该信息时的旋转轮。当然,如果您有权访问服务器,则可以解决此问题。
我的第三个问题是,如果无论如何都要控制'connection:didReceiveData'的调用。
不幸的是我不这么认为。您应该使用较低级别的api,例如CFStream,它允许定义缓冲区大小。