Tra*_*hor 9 iphone crash asihttprequest
我有一个基于导航的应用程序.按主视图上的按钮,然后我将新视图推送到导航控制器.所有非常基本的东西.
加载新视图时,我执行ASIHTTPRequest来获取一些json数据,这是一个图像URL列表.然后我做一个for循环,创建一堆ASIHTTPRequests,将它们添加到队列然后运行队列.
但是如果我在队列结束前单击后退按钮,应用程序崩溃了,这个应用程序会显示房屋,让我们说你选错了房子,在显示任何照片之前很快点击回来,bumm崩溃.
这个主题http://groups.google.com/group/asihttprequest/browse_thread/thread/3d4815198aa889b9解释了我的问题,除了我确实取消了视图上的所有请求卸载,将委托设置为nil并释放队列.
我还是崩溃了.如果我使用3G,每次都会崩溃,但是在wifi上真的很难让它崩溃,但是非常可行.
在几乎80%的实例中,调试器在ASIHTTPRequest.m中跳转到此行
(void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders {
if ([self error] || [self mainRequest]) { return; }
--> if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
Run Code Online (Sandbox Code Playgroud)
很多情况下它会跳到:
(void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders {
if ([self error] || [self mainRequest]) { return; }
---> if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
Run Code Online (Sandbox Code Playgroud)
广告在少数情况下进入我的主循环
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
--> int retVal = UIApplicationMain(argc, argv, nil, nil); with SIGBART error [pool release]; return retVal;
Run Code Online (Sandbox Code Playgroud)
我正在使用MBP和MacPro,最新的OS X,Xcode 4.0.2,我测试除了原始iPhone之外的所有苹果设备.
我真的不想重写我的整个应用程序,但是还有什么比ASIHTTPRequest更好吗?
Dan*_*Ray 12
尝试取消和取消设置委托-viewWillUnload而不是-viewDidUnload.我怀疑它实际卸载的时间窗口(在调用这两个UIViewController方法之间)是你可以崩溃的时间段.委托已经离开,但您还没有告诉您的ASIHTTPRequest对象.
错误是委托仍然被设置。
我找到了两种方法来解决这个问题。
我认为丑陋的方式是,您创建一个通用委托来处理所有网络流量,并在应用程序首次运行时实例化。我实际上使用了应用程序委托并收听 nsnotification 中心消息。它的工作原理就像一个魅力,应用程序永远不会崩溃,但我认为它不是最佳的。
最好的方法是不设置委托,也不使用“setDidFinishSelector”,而是使用“setCompletionBlock:^”。这仅适用于运行 iOS 4.0 及更高版本的设备,该比例超过 90-95%,并且还在不断增长。这是一个很棒的方法,不会使应用程序崩溃。
| 归档时间: |
|
| 查看次数: |
6077 次 |
| 最近记录: |