ASIHTTPRequest 在 iOS 3.1.3 上崩溃

Posted

技术标签:

【中文标题】ASIHTTPRequest 在 iOS 3.1.3 上崩溃【英文标题】:ASIHTTPRequest crashes on iOS 3.1.3 【发布时间】:2011-08-04 08:41:42 【问题描述】:

我一调用 [[ASIHTTPRequest alloc] initWithURL:url]; 我的应用程序就崩溃了在我的 iPod Touch 1G 上。在 ios 4.x 上没有问题。

我看到的错误是 Error Domain=ASIHTTPRequestErrorDomain Code=10 UserInfo=0x368790 "NSRangeException"

我从我实施的崩溃管理系统中得到的回溯是

backtrace: (
"0   MayasDUp                            0x0007f21b -[SWCrashManager backtrace] + 18",
"1   MayasDUp                            0x0007ece1 sighandler + 144",
"2   libSystem.B.dylib                   0x3049e7eb _sigtramp + 26",
"3   MayasDUp                            0x0005128b -[ASIHTTPRequest buildPostBody] + 850"

)

我什至单独放置了 [[ASIHTTPRequest alloc] initWithURL:url] 调用,没有执行任何其他操作,例如设置 post 变量和启动连接。崩溃仍然发生。

我已经在 ASIHTTPRequest 中放置了断点并记录了 NSLog,但没有任何有用的结果。

有人遇到过类似的问题吗?

【问题讨论】:

你能在调试器中运行它并准确地告诉我们它在 buildPostBody 中的哪一行崩溃了吗? buildPostBody 方法已完全执行。我在方法的最后放置了一个 NSLog 调用和一个断点,并且执行正常到达该点。该应用程序在线程 3 上崩溃,它只显示 0 ???> 节点以获取更多详细信息。崩溃似乎是在一小段延迟后发生的,无法正常显示。 您是否在启用 NSZombies 的情况下运行过? 由于某种原因,我无法让 NSZombie 出现......但在深入挖掘后发现问题来自 [NSArray objectAtIndex:] 调用,它试图访问 [6 ] 但长度为 4。这解释了我得到的 NSRangeException 错误。我在 ASIHTTPRequest 类中的每个 objectAtIndex 调用之前都放置了 NSLogs,但是没有数组访问这样的索引。 尝试在 objectAtIndex 上设置断点? 【参考方案1】:

经过深挖,发现问题很深,其实是编译器的bug。

简而言之,使用 LLVM 2.0 并为项目设置优化级别 > 无会导致编译文件(ASIHTTPRequest 和 ASIFormDataRequest)损坏,从而导致崩溃并且在堆栈跟踪中没有提供任何真实数据。

我们应用的解决方案是保持编译器和优化设置不变,并为有问题的 2 个 ASIHttp 文件添加 -O0 编译器标志。

其他用户报告说 XCode 4.0.2 修复了编译器问题。

对于任何感兴趣的人,这里有一些详细信息: http://groups.google.com/group/asihttprequest/browse_thread/thread/c598649bfe71643c/8ee09defd12386ba?lnk=gst&q=crashes#8ee09defd12386ba

【讨论】:

【参考方案2】:

您可能在主线程上运行了一些耗时超过 10 秒的东西。你在做同步http请求吗?您必须使用:

[request startAsynchronous];

如果你在主线程上。

【讨论】:

我正在使用 startAsynchronous。 那么还有其他东西需要很长时间才能运行。尝试使用仪器运行以查看时间的去向,或者在超时发生之前在调试器中暂停,或者使用日志记录,或者发布更多代码。

以上是关于ASIHTTPRequest 在 iOS 3.1.3 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

IOS-网络(ASIHTTPRequest的使用简介)

IOS开发 REST请求 ASIHTTPRequest用法

适用于iOS的RestKit或ASIHTTPRequest的替代品

我应该如何处理 iOS 中的 ASIHTTPRequest 异步调用?

iOS进阶课程-ASIHTTPRequest框架-关东升-专题视频课程

如何在ios中使用ASIHTTPRequest向服务器发送和检索用户名和密码以及图像