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的RestKit或ASIHTTPRequest的替代品
我应该如何处理 iOS 中的 ASIHTTPRequest 异步调用?