- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个使用 AFNetworking 制作的 iOS 应用程序。我有一个单独的自定义 httpclient 子类,我用它来使用我的 api 并从服务器下载二进制文件。
我需要下载大约 100 个文件。遍历我的 url 数组并为每个 url 创建一个 AFHTTPRequestionOperation 是否安全?我的代码是这样的:
NSMutableURLRequest* rq = [[MIHTTPClient sharedInstance] requestWithMethod:@"GET" path:@"...." parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:rq] ;
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//completion
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//manage error
}];
[[MIHTTPClient sharedInstance] enqueueHTTPRequestOperation:operation];
我如何才能收到来自该队列的反馈?我没有看到任何“HTTPClientDelegate”协议(protocol)或类似的东西。
最佳答案
有关进展,请参阅 setDownloadProgressBlock
(AFURLConnectionOperation
的一部分,AFHTTPRequestOperation
是其子类),例如:
[operation setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
NSLog(@"Sent %d of %d bytes, %@", totalBytesWritten, totalBytesExpectedToWrite, path);
}];
并且,在您的代码示例中,您正在调用 setCompletionBlockWithSuccess:failure:
,以便提供有关各个操作完成的状态。就我个人而言,在我的小测试中,我只是维护我请求的下载数组,并让这三个 block (进度、成功和失败)更新我的下载状态代码,如下所示:
for (NSInteger i = 0; i < 20; i++)
{
NSURLRequest *request = ... // set the request accordingly
// create a download object to keep track of the status of my download
DownloadObject *object = [[DownloadObject alloc] init];
download.title = [NSString stringWithFormat:@"Download %d", i];
download.status = kDownloadObjectStatusNotStarted;
[self.downloadObjects addObject:download];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
download.status = kDownloadObjectStatusDoneSucceeded;
// update my UI, for example, I have table view with one row per download
//
// [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]]
// withRowAnimation:UITableViewRowAnimationNone];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
download.status = kDownloadObjectStatusDoneFailed;
// update UI
//
// [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]]
// withRowAnimation:UITableViewRowAnimationNone];
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
download.totalBytesRead = totalBytesRead;
download.status = kDownloadObjectStatusInProgress;
// update UI
//
// [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]]
// withRowAnimation:UITableViewRowAnimationNone];
}];
[queue addOperation:operation];
}
您可以通过这种方式跟踪单个下载。您也可以只跟踪挂起的操作(或查询 HTTPClient
对象的 operationQueue
属性,并查看它的 operationCount
属性)。
就下载100个文件而言,两点考虑:
我本以为您会想在 HTTPClient
子类的 operationQueue
上调用 setMaxConcurrentOperationCount
,将其设置为一些合理的数字(4 或 5),看一眼 AFNetworking 代码,它似乎并没有这样做。我发现,如果超出这个范围, yield 就会递减,并且如果所有文件都来自单个服务器,那么在给定客户端和给定服务器之间可以完成多少并发操作就会受到限制。
我读过一些传闻,称 Apple 将拒绝通过蜂窝网络发出异常请求的应用程序。参见 https://stackoverflow.com/a/14922807/1271826 .
关于ios - AF网络。检查所有操作队列的下载进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161758/
我是 ADF faces 的新手,在 af:selectOneChoice 的值更改上部分触发 af:panelAccordion 时遇到麻烦。 af:panelAccordion 在其 af:sho
我有一个非常简单的没有支持 bean 的 jspx:
我正在使用 wordpress 4.9.7我正在使用 advanced custom fields 4.4.12 . 在我的后端,我有一个名为 coins 的帖子类型,其中有一个名为 related_
如何更改 UIImageview 上图像显示的大小,我正在使用 AFNETWORKING 下载图像,它适合 UIImageView 的大小。 但我只想显示图像的一半,就像 Facebook 应用程序中
我有这样一个字符串: '(459..521),(1834..2736)' 我想让它看起来像这样: [(459, 521), (1834, 2736)] 也就是说,一个包含值的元组列表,而不是字符串。
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我目前正在从事一个涉及音频流的项目。由于版权问题,我必须限制同时访问该文件的人数,但谷歌并不是我寻找合适解决方案的 friend 。我的站点(在 WordPress 上运行,因此在 PHP 和 mys
我的主要编程语言,j ,最近开源了。为了改进它,我正在研究用 C 编写的源代码。 但自从我阅读或编写 C 以来已经有很长(!)的时间了,那时我什至都不擅长。这个特定代码库的编写方式是......特殊的
我正在尝试进行自定义缩混转换,大致相当于: ffmpeg -y -i "file.mkv" \ -map 0:1 -c:0 flac -ac:0 4 \ -map 0:3 -c:1 flac -a
ffmpeg 无法识别“-af”选项。我怎样才能解决这个问题? $ ffmpeg -i 01.wav -af pan=1:c0=c1 01mono.wav ffmpeg version 0.10.12
我用来获取日期输入。当日历弹出时,我想将其移动到左侧(从屏幕左侧开始)。这可行吗?如果是这样,如何控制? 谢谢,肖恩 最佳答案 您没有 af:inputDate 的控件,该控件根据屏幕限制和可用空间决
有谁知道如何根据特定属性过滤日历事件? 例如,基于提供商 ID 或其他内容。我想要的是有一些复选框,通过选中这些复选框,日历事件将相应地显示。 最佳答案 使用 View Object View Cri
我有处理位置数据的代码,因此我可以提取可以匿名化数据的详细信息——例如,如果我的地点 API 说它是 _type:“Building”和 building:“Safeway”——我可以保存数据作为纬度
我需要来自使用 Alamofire 的 Post 请求调用的 json 响应的数据,但由于某种原因我无法访问该数据 我尝试跟随 Alamofire github 文档以及这篇文章 get data f
我的页面中有一个,但我不希望输入文本旁边有日历图标。如何删除该日历图标? 谢谢,肖恩 最佳答案 您可以通过自定义 Oracle ADF 皮肤 CSS 来隐藏日历图标: https://docs.ora
我收到此错误已有 2 天了。我已阅读有关相同错误的任何链接,但每次都没有效果。 我正在尝试简单的继承这是我的 employee.py 文件 class Employee(models.Model):
我是 Android 编码和这个论坛的新手。当我尝试运行项目来测试它时,我收到以下错误:- "app_name" is not translated in af, am, ar, be, bg, ca
我想要完成的是: 如果我的整个工作表中 AC-AF 列中的任何单元格为空白,请剪切整行并粘贴到标有“MissingShipping”的新工作表中。 代码应该根据行数进行调整,因为这永远不会相同。 从我
如何从 AF 列及以后读取 Excel 文件?我不知道最后一列字母名称,而且文件太大,无法不断检查。 df = pd.read_excel(r"Documents\file.xlsx", usecol
我正在使用 OSIsoft AF SDK 版本 4。 添加引用后,一切工作正常,Visual Studio 可以看到 OSISoft 命名空间和所有内容。但是当我尝试构建时,我在输出窗口中收到此错误并
我是一名优秀的程序员,十分优秀!