我有两个表格视图。当我选择一个选项卡时加载一个,当我选择另一个选项卡时加载另一个选项卡。
我使用MBProgressHUD允许在标签之间快速切换,因为我使用Objective Resource从web中提取tableview数据源,这可能需要一点点。所以我抛出一个等待数据加载的HUD进度指示器。
这反过来让我可以在标签之间快速切换。但是......如果我做得足够快就会发生异常
EXC BAD ACCESS
使用NSZombiesEnabled我得到了这个: 2010-08-02 22:44:43.116电影巨星[962:8703] *** - [MBProgressHUD发布]:消息发送到解除分配的实例0x85490b0
在我的两个tableviews中,我使用了两个不同的自定义tableviewcells。
我的下一步调试是什么?
...所以我已经移动代码从我的viewWillAppear:viewDidLoad方法创建HUD:崩溃消失了。 // hud将显示视图上的所有输入(使用视图层次结构中可能的最高视图)
HUD = [[MBProgressHUD alloc] initWithView:self.view];
//HUD.graceTime = 0.5;
//HUD.minShowTime = 5.0;
// Add HUD to screen
[self.view addSubview:HUD];
// Register for HUD callbacks so we can remove it from the window at the right time
HUD.delegate = self;
// Show the HUD while the provided method executes in a new thread
[HUD showWhileExecuting:@selector(loadFilms) onTarget:self withObject:nil animated:YES];
然而这并没有真正解决我的问题,因为viewDidLoad只会在很长一段时间内发生,特别是在新的多任务处理时。每当tableview出现时,我都需要这个HUD来激活选择器。
为什么让它出现在viewWillAppear中是不正确的...是因为可以加载这么多而我只是继续分配对象? perhasp我应该在viewDidload中分配并触发
// Show the HUD while the provided method executes in a new thread
[HUD showWhileExecuting:@selector(loadFilms) onTarget:self withObject:nil animated:YES];
仅在我的viewWillAppear:?
Thoughts?
答案 0 :(得分:0)
找到您初始化/保留/释放/自动释放MBProgressHUD
实例的所有位置。
NSZombie告诉该项目在被解除分配后收到release
消息(保留计数为零)。
如果你发布一些代码会有所帮助 - 否则你很难帮助你......
修改的:
正如您在编辑中提到的那样,如果您每个视图控制器只启动一次HUD(例如在viewDidLoad中)并且每次需要时调用showWhileExecuting(例如在viewWillAppear中),那就更好了。
但它仍然没有解释崩溃。
您从视图控制器的同一实例执行了您已经发布的所有代码(按原样)几次,那么您应该有内存泄漏。那是因为我没有看到你在哪里发布旧的HUD实例。
此外,您最好在发布之前将HUD的delegate
设置为nil
,然后在视图的[super dealloc];
方法中调用dealloc
之前控制器。
最后一个可能会导致EXC BAD ACCESS
错误。
还有一件事,如果您发布的整个代码被执行多次,那么您在self.view
下也应该只有少量HUD视图。
我不知道HUD在后台做了什么 - 也许这会导致错误......