ASIHTTPRequest使用过程中遇到的问题及解决办法转之薄桜の霊

久仰ASIHTTPRequest大名,在决定使用ASIHTTPReques之前已经阅读了它的使用文档( 请参考:http://allseeing-i.com/ASIHTTPRequest/ ),文档写的很详细,感觉使用起来应该没有什么大问题了,可是到真正开发编程时,还是遇到了一些问题,有一些细节并没有体现在它的文档里(或者是我没看到 -_-#),我在这里简单的归纳总结一下:

1.  如何把ASIHTTPRequest添加到自己的ios工程里

  关于这一点官方的文档已经有详细的说明,我把它列出来只是为了方便日后参考。

  首先需要把源码里的文件引用到现有工程,如果只是用到基础功能的话,只需引用下图所示的文件:

  

  然后需要添加CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics 和 zlib这些framework,添加方法如下图:

  

  详细的配置文档请参考:http://allseeing-i.com/ASIHTTPRequest/Setup-instructions

2.  使用ASINetworkQueue下载出错

  我的下载队列大概有十几个图片,在我确保网络连接没有问题的情况下,每次[queue go]之后总有一两张图片下载失败,这个问题困扰了我很久,不知道问题出在哪里。我的queue的配置如下:

    [mNetworkQueue reset];    [mNetworkQueue setDownloadProgressDelegate:progressIndicator];    [progressIndicator release];    [mNetworkQueue setRequestDidFinishSelector:@selector(converFetchComplete:)];    [mNetworkQueue setRequestDidFailSelector:@selector(converFetchFailed:)];    [mNetworkQueue setShowAccurateProgress:YES];    [mNetworkQueue setDelegate:self];    [mNetworkQueue setQueueDidFinishSelector:@selector(converQueueComplete:)];

  之后经过反复的调试,我发现是setShowAccurateProgress这个方法引起的,如果不配置这个方法,下载过程就不会出错。但是我的用法是参考了ASIHTTPRequest官方的sample的用法,应该没有什么区别(参考:QueueViewController.m)。虽然问题解决了,但是导致下载失败的根本原因没有搞清楚,回头再看看源码,找到问题的根源再来更新。

3.  setDownloadDestinationPath 不会自动创建路径

  之前用[SSZipArchive unzipFileAtPath:targetPath toDestination:destinationPath]的时候如果目标路径不存在会自动创建,想当然的以为ASIHTTPRequest的setDownloadDestinationPath方法也回自动创建,事实证明这种想法是错误的,如果目标路径不存在会导致request失败。解决方法是在 设置之前先判断目标路径是否存在,不存在就手动创建好,参见如下代码:

    if (![[NSFileManager defaultManager] fileExistsAtPath:[targetPath stringByDeletingLastPathComponent]])     {        [[NSFileManager defaultManager]             createDirectoryAtPath:[targetPath stringByDeletingLastPathComponent]             withIntermediateDirectories:YES attributes:nil error:nil];           }

4.  用ASIHTTPRequest下载文件,如果请求的url不存在,不会报告错误

  用ASIHTTPRequest下载文件时,如果请求的文件不存在,并不会触发requestFailed,它会下载一个描述错误的文本文件保存到目标路径,用文本编辑器打开后如下所示:

  

  这个文件描述的是404错误,这种情况下怎么判断我下载的文件是否是我真正要下载的呢,解决方法是在setRequestDidFinishSelector指定的selector中加入404状态的判断,代码如下:

- (void)converFetchComplete:(ASIHTTPRequest *)request{    NSLog(@"request name is %@", [request.userInfo objectForKey:@"name"]);if( [request responseStatusCode] == 404 )// 判断是否发生404错误    {        NSLog(@"the requested url was not found!!");if ([[NSFileManager defaultManager] fileExistsAtPath:request.downloadDestinationPath]) {            [[NSFileManager defaultManager] removeItemAtPath:request.downloadDestinationPath error:NULL];        }    }}

  注:其中converFetchComplete为我指定的setRequestDidFinishSelector。

5.  需要注意的有关内存回收的问题

  关于这一点,ASIHTTPRequest的官方文档中有提到一些:Requests don’t retain their delegates, so if there’s a chance your delegate may be deallocated while your request is running, it is vital that you clear the request’s delegate properties. In most circumstances, if your delegate is going to be deallocated, you probably also want to cancel request, since you no longer care about the request’s status.

  官方给出的代码示例如下:

// Ddealloc method for our controller- (void)dealloc{   [request clearDelegatesAndCancel];   [request release];   ...   [super dealloc];}

  这里只说明了request回收的问题,如果是ASINetworkQueue的话也存在同样的内存回收的问题,解决方法如下:

// Ddealloc method for our controller- (void)dealloc{// request 回收    [mRequest clearDelegatesAndCancel];    [mRequest release];// networkQueue 回收    [mNetworkQueue reset];    [mNetworkQueue release];   ...   [super dealloc];}

 

  以上为我最近在使用ASIHTTPRequest时遇到的问题,以后再碰到ASIHTTPRequest相关的问题我会不断在此更新。

时间: 2024-10-11 13:57:03

ASIHTTPRequest使用过程中遇到的问题及解决办法转之薄桜の霊的相关文章

SQL Server 2008安装过程中出现1608错误的解决办法

一直使用SQL Server 2000 ,觉得安装方便快速,便不想升级到2005/2008.今天有个项目突然要用到2008,于是就在Windows7下安装了一下,没想到碰到一个1608 错误,中间提示一大堆信息,上网搜索了一下,也好多遇到过这个错误,试了网上的方法都没有成功,郁闷中搜索到一个国外的方法:   SQL Server 2008 Setup fails on Windows 7 Enterprise, Error code 1608 To troubleshooting the iss

记一次wordpress安装过程中遇到的问题及解决办法

Q:无法建立目录wp-content/uploads/2017/03.有没有上级目录的写权限?A:执行chmod 777 wp-content/ 提升目录权限 Q:安装主题或安装插件的时候,用到FTP提示用户名密码不正确,使用XFTP也连接不上?A:这是由于根目录的权限过高(777),应该把根目录的权限设置为555,chmod 555 /var/www/html Q:无法将上传的文件移动至wp-content/uploads/2017/03?A:执行chmod -R 777 wp-content

PHP编译过程中常见错误信息的解决方法

PHP编译过程中常见错误信息的解决方法 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息,基本上都可以通过yum安装相应的库来解决.以下是具体的一些解决办法: checking for BZip2 support- yes checking for BZip2 in default path- not found configure: error: Please reinstall the BZip2 distribution Fix: yum install bzip2-devel

Dedecms使用过程中碰到Fatal error的解决方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天一晚上都在忙活着做个军事新闻类型的站,因为用的是外国空间做,所以需要找个php的cms系统来搞.        选了4个小时,还是选定了dede,07年的时候用过一次,当时喜欢supersite就放下了,现在看来在phpcms中还是dede更新的最快,呵呵.顺便宣传下做的新站:[http://jiaoyou.jiefangjun.org/

dedecms建站过程中常见却不知道怎么解决的问题

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 dedecms建站过程中常见却不知道怎么解决的问题 虽然现在已经是凌晨1点多了,可阿光还坐在电脑前写"dedecms建站过程中的常见却不知道怎么解决的问题"这篇文章旨在记录最近的工作收获,至少可以说现在用dede建设企业网站已经没有什么大碍了,但在这一路走来的过程中也遇到了不少麻烦和问题,都是通过自己不断的尝试和总结才得以

请教solr安装过程中出现如下问题如何解决啊?

问题描述 请教solr安装过程中出现如下问题如何解决啊? 解决方案 你的代码有问题 看看出错提示的代码行数

求大神告知eclipse中关联library失败的解决办法

问题描述 求大神告知eclipse中关联library失败的解决办法 想实现一个Tab,想导入TabPageIndicartor的library,但老是错误,查了资料说是盘符错误,但还是不知道怎么操做,错误如图. 解决方案 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0522/1265.html 解决方案二: 谢谢回答.这个问题我已经解决了,只需要将library导入时,勾选将library文件同时复制到wordplace

Android中ScrollView嵌套GridView的解决办法

前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全. 找到大家的通用解决办法.记录一下. 解决办法,自定义一个GridView控件 public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } pub

SQL Server 2008 R2 安装过程中出错的一种解决方法

可能是先装了vs2010,它会装部分与sql2008相关的东西,之后再装sql2008或sql2008r2版本,就可能会出错装不了.. 先下载:Total_Uninstall6.3.1,卸载sql2008或sql2008r2安装程序相关的文件,这个软件会卸载注册表中相关的东西: 下载地址: http://yunpan.cn/QbFmyhXqsusph (原来使用YourUninstaller去卸载,它不能删除相关的注册表里的东西) 另外的错误: 标题: Microsoft SQL Server