IOS:多个 NSUrlConnection 以及多个 UIProgressBar

Posted

技术标签:

【中文标题】IOS:多个 NSUrlConnection 以及多个 UIProgressBar【英文标题】:IOS: multiple NSUrlConnection along with multiple UIProgressBar 【发布时间】:2015-02-26 12:21:29 【问题描述】:

我正在编写一个 ios 文件上传应用程序,它一次打开多个NSUrlConnection(每个文件上传一个文件),并希望为每个文件实现相应的进度条。

NSUrlConnection文件上传sn-p:

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request
                                                                  delegate:self

[urlConnection start];

更新进度条的委托方法:

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 
self.progressBar.progress += (float)bytesWritten/(float)totalBytesExpectedToWrite;
NSLog(@"it's working: %lf",self.progressBar.progress);

现在这种情况如果我每个文件上传都有一个单独的进度条,有没有办法知道是哪个文件上传,也就是这个delegate对应的是哪个NSURLConnection,这样我就可以更新正确的进度条了因此。我可以在NSURLConnection 中设置任何属性,我可以在委托方法中的连接变量中访问这些属性吗?

谢谢。

【问题讨论】:

【参考方案1】:

我所做的是我构建了自己的类(例如 MyUploader),并在其中添加了 NSURLConnection 对象,同时还引用了将由该 NSURLConnection 对象更新的进度条控件。

@interface MyUploader

@property (strong, nonatomic) NSURLConnection* connection;
@Property (weak, nonatomic) UIProgressBar bar;

- (void)startUploadingFile:(NSString*)filePath withBarToUpdate:(UIProgressBar*)progressBar;

@end 

在您的视图控制器中,您可以在 startUploadingFile:withBarToUpdate: 中传递 bar 对象和文件路径,它可以存储 bar 对象并启动连接。

这个类也应该实现 NSURLConnectionDelegate 来更新进度条,就像你在代码中所做的那样

【讨论】:

以上是关于IOS:多个 NSUrlConnection 以及多个 UIProgressBar的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之网络编程--使用NSURLConnection实现大文件下载

iOS 7系列译文:忘记NSURLConnection,拥抱NSURLSession吧!

IOS 开发 网络详解--- AF3.0使用

iOS5 中的 NSURLConnection

iOS网络开发使用NSURLConnection

iOS开发网络篇—NSURLConnection基本使用