加载视图时获取EXC_BAD_ACCESS(MBProgressHUD + ASIHTTPRequest)

时间:2011-02-11 14:07:50

标签: iphone objective-c asihttprequest

格尔茨,

我目前在mainViewController上管理“加载”屏幕时遇到问题(用户访问的第一个视图。)所以基本上第一个视图下载图像并将其放在UIImageView上。发生这种情况时,会显示MBProgressHUD。然后,用户使用自己的控制器转到第二个View。用户上传图像并返回。当用户返回mainView时,将重新加载mainView,因此不会显示与之前相同的图像。从逻辑上讲,“加载”MBProgressHUD也应该显示出来。尽管如此,它甚至可以让它显示之前崩溃,它在转换过程中崩溃。

事情是错误exc_bad_access只有在我实现MBProgressHUD时才会出现(必须是内存管理的问题,但我似乎没有得到它......)这些是带有相关代码的段:

mainViewController.m

- (void)viewDidLoad {   
   HUD = [[MBProgressHUD alloc] initWithView:self.view];
   [self.view addSubview:HUD];
   HUD.delegate = self;
   HUD.labelText = @"Please Wait";
   [HUD showWhileExecuting:@selector(loadingOfImageAndInformation) onTarget:self        withObject:nil animated:YES];
   [super viewDidLoad];
}

- (void) loadingOfImageAndInformation {
    // [...] get URL and blabla.
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:imageURL];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestLoadDone:)];
    [request setDidFailSelector:@selector(requestLoadWentWrong:)];
    [request setDownloadProgressDelegate:HUD];
    [request startAsynchronous];
}

- (void)hudWasHidden {
   // Remove HUD from screen when the HUD was hidded
   [HUD removeFromSuperview];
   [HUD release];
   // HUD = nil; I tried this because I found it on another 
   // answer in S.O. but it didn't quite work. 
   // I don't think it is the same case.
   // I also tried putting this on the dealloc method and 
   // the didReceiveMemoryWarning to no avail... 
}

这是另一个question处理类似问题,但并没有解决我的问题。

非常感谢您将来的帮助!!

2 个答案:

答案 0 :(得分:2)

对不起,我还没看完整个问题。通常当你得到EXC_BAD_ACCESS时,很容易弄明白你是否启用了NSZombie。如果它没有帮助发表评论,我会看看我是否可以改进我的答案。

要激活NSZombie,请执行以下操作:

  1. 获取可执行文件的信息。
  2. 转到参数选项卡。
  3. 在“要在环境中设置的变量:”部分添加:
  4. 名称:NSZombieEnabled 价值:是

    然后像往常一样运行您的应用程序,当它崩溃时,它应该告诉您哪个已解除分配的对象收到了释放消息。

答案 1 :(得分:0)

您将HUD设置为request的downloadProgressDelegate。在您发布request后,HUD可能会尝试向其发送消息。如果你在调试器中运行你的代码,你在崩溃时得到的堆栈跟踪应该告诉你是否是这种情况。