- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用以下方法下载一堆较大的 zip 文件。这可能需要一些时间,所以我想显示一个进度条。
我研究了如何处理 NSURLConnection 的委托(delegate)方法,这看起来很简单,但是我想用“sendAsynchronousRequest”实现同样的事情。如何获取下载时下载的字节数以及预期的总字节数,以便显示进度条?我了解,如果我以我正在执行的方式开始下载,我将无法使用委托(delegate)方法。
// Begin the download process
- (void)beginDownload:(NSMutableArray *)requests {
// Now fire off a bunch of requests asynchrounously to download
self.outstandingRequests = [requests count];
for (NSURLRequest *request in requests) { // Get the request
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
// Error check
if ( error != nil ) {
// The alertview for login failed
self.appDelegate.warningView.title = @"Refresh Error!";
self.appDelegate.warningView.message = [error localizedDescription];
// Show the view
[self.appDelegate.warningView show];
// Debug
if ( DEBUG ) {
NSLog(@"A request failed - %d left!",self.outstandingRequests);
}
}
else {
// Debug
if ( DEBUG ) {
NSLog(@"A request is done - %d left!",self.outstandingRequests);
}
}
// Decrement outstanding requests
self.outstandingRequests--;
// No requests are left
if (self.outstandingRequests == 0) {
// Debug
if ( DEBUG ) {
NSLog(@"All requests are done!");
}
// Get rid of loading view
[self performSelector:@selector(dismissLoadingView) withObject:nil afterDelay:0.15];
}
}];
}
}
How to make an progress bar for an NSURLConnection when downloading a file?
http://iphonedevsdk.com/forum/iphone-sdk-development/24233-nsurlconnection-with-uiprogressbar.html
http://iphoneeasydevelopment.blogspot.com/2011/10/use-progess-bar-when-downloading-file.html
最佳答案
sendAsynchronousRequest 不会为您的目的工作,因为在请求完成之前它不会调用您的回调。您需要使用 initRequest:withDelegate: 并处理您自己的数据积累。
当接收到 header 时(可能多次重定向)您的 didReceiveResponse 方法将被调用,您可以在那里选择预期的大小:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
_expectedBytes = (NSUInteger)response.expectedContentLength;
_data = [NSMutableData dataWithCapacity:_expectedBytes];
// make a progress update here
}
每次收到数据 block 时,您都会收到对委托(delegate)方法 didReceiveData 的调用,因此您知道到目前为止收到了多少数据。
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_data appendData:data];
_receivedBytes = _data.length;
// make a progress update here
}
关于ios - 带有 sendAsynchronousRequest Objective-C 的 NSURLConnection 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564582/
我的主 UI 线程调用 sendAsynchronousRequest NSURLConnection的方法获取数据。 [NSURLConnection sendAsynchronousRequest
在下面的方法中,如果我在completionHandler中进行数据处理,是否会阻塞主线程?换句话说,completionHandler 中执行的任何操作是在主线程上完成还是在后台线程上完成? + (
我打电话 [NSURLConnection sendAsynchronousRequest:request queue:queue
我正在尝试使用 POST 从 PHP 页面获取简单的文本响应。我有以下代码: func post(url: String, info: String) -> String { var URL:
我不想做的事情的示例: var b = 0 let URL: NSURL = NSURL(string: "[URL to php file]")! let request:NSMutableURL
我正在使用以下代码进行网络调用。我知道响应将在 mainQueue 中运行,因为我已将队列参数指定为 [NSOperationQueue mainQueue] 但我想知道实际的 sendAsynchr
我正在开发一个 iOS 应用程序,它可以将大量任务分派(dispatch)到我的串行队列。任务是从我的网络服务器下载图像,将其保存到磁盘,然后显示在 UIImageView 上。但是,[NSURLCo
我有一个创建 NSURLRequest 的方法,并使用 NSURLConnection 方法 sendAsynchronousRequest:queue:compltionHandler: 发送该请求
我正在编写一些执行 http 请求的 API 代码,并且我一直在使用 [NSUrlConnection:sendAsynchronousRequest:queue:completionHandler]
这是我的代码崩溃的部分: let bodyData = "username=" + username + "&password=" + password let URL: NSURL = NSURL(
我正在尝试使用 POST 从 PHP 页面获取简单的文本响应。我有以下代码: func post(url: String, info: String) -> String { var URL:
我正在使用 sendAsynchronousRequest:queue:completionHandler: 上传文件(我已经删除了一些旧的第三方库,以支持使用此 native 方法直接调用。我保留了
当我执行NSURLConnection.sendAsynchronousRequest时,它总是显示相同的错误: Invalid conversion from throwing function o
我的应用程序允许用户拍照并将其上传到 PHP 服务器。我使用 sendAsynchronousRequest 调用将数据(带有照片文件的表单)发送到服务器。调试时,所有这些调用在我的 iPad 2 上
每次用户打开应用程序时,我都必须加载 API 的刷新 token 。 在我的 appDelegate.m 中,每次应用程序打开时我都会调用此代码: if(success){ //if the url
对不起,我不知道这一点,但我想知道为什么我尝试建立与数据库的连接时会出现延迟。 我基本上是从数据库中提取数据以将信息显示回 UITableView,但连接建立似乎有延迟。 - (void)viewDi
如果互联网连接出现问题,我会尝试取消异步请求。 var connection: NSURLConnection! self.connection = NSURLConnection.sendAsync
我的应用程序中有几个内存泄漏(不!请参阅更新 1),它们都归结为异步 URLRequest。下面的代码给了我一个内存泄漏,似乎“数据”从未被释放(下面的代码在逻辑上没有在我的应用程序中使用,因为它是一
我用这段代码发出请求: - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ //
.h @property (strong) NSString *reply; 我有以下方法: .m @synthesize reply; - (void)send { [NSURLConnecti
我是一名优秀的程序员,十分优秀!