0

我有上传和下载图像和音频文件的单一视图。这是我在做什么

要开始下载我正在使用这个:

 NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

这会触发它的 delagate 方法

connection:didReceiveResponse:

connection:didReceiveData:

connectionDidFinishLoading:

在这些方法中,我正在计算文件大小,通过进度条显示下载进度并将文件保存在我的设备中。

为了上传我正在这样做

[NSURLConnection connectionWithRequest:request delegate:self];

并使用这个connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:

这个委托方法工作正常上传文件,还告诉 bytesWritten,totalBytesWritten,totalBytesExpectedToWrite 但它也调用

connection:didReceiveResponse:

connection:didReceiveData:

connectionDidFinishLoading:

并且它是有效的,因为它们都是委托方法。

但问题是我正在使用这三个来处理下载。

关于上传和下载数据,使用 NSURLConection 的正确方法是什么?

参考苹果文档

4

3 回答 3

2

对我来说最好的方法是在专用类(例如 DownloadingDelegate 和 UploadingDelegate)中实现委托,并为每个连接实例化不同的委托。然后可以完全独立地处理下载和上传过程。

或者,如果下载和上传不是并发的,使用布尔值作为标志并在您的委托函数中测试它会更简单。

例如,假设您使用一个名为 的布尔实例变量downloading

您将有下载:

downloading = true;
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

和上传:

downloading = false;
[NSURLConnection connectionWithRequest:request delegate:self];

然后在你的代表中:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if( downloading )
    {
        // handle the response when downloading ...
    }
    else
    {
        // when uploading
    }
}
于 2012-11-19T10:44:04.697 回答
1

保存指向 NSURLConnections 的指针,并在委托内部确定使用哪一个。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if(connection==downloaderConn) {
       //handle download
    }
    else {
       //handle upoad
    }
}
于 2012-11-19T10:50:27.003 回答
-1

您可以AFNetworking用于您的任务。

AFNetworking是一个令人愉快的网络库iOSMac OS X. 它建立在NSURLConnection,NSOperation和其他熟悉的Foundation technologies. 它具有modular architecture精心设计、功能丰富的 API,使用起来很愉快。

在这里找到SDK

于 2012-11-19T10:31:17.987 回答