2011-02-11 51 views
0

格尔茨,当获得EXC_BAD_ACCESS加载视图(MBProgressHUD + ASIHTTPRequest)

目前我有我的mainViewController管理“加载”屏幕问题(用户访问的第一个观点。)所以基本上第一个视图下载图像并把它放在一个UIImageView上。发生这种情况时,会显示MBProgressHUD。现在,用户使用自己的控制器进入第二个视图。用户上传图像并返回。当用户返回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

非常感谢您的未来帮助!

+0

如果你需要构建堆栈让我知道。 – Joze 2011-02-11 14:09:59

+0

HUD是保留财产吗? – 2011-02-11 16:15:53

回答

0

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

2

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

要激活NSZombie做到以下几点:

  1. 获取可执行的信息。
  2. 转到参数选项卡。
  3. 在“变量在环境中进行设置:”部分添加:

名称:NSZombieEnabled 值:是

然后运行你的应用程序像往常一样,当它崩溃,它会告诉你哪个释放对象收到释放消息。