[英]iPhone app crashes when user exits UITableView with MBProgressHUD running in separate thread
在我的应用程序中,我有一个UITableViewController,它从我的Core Data商店加载计算数据。 这可能需要相当长的时间并且挂起主线程,因此为了给用户提供可视反馈,我已经安装了MBProgressHUD小部件,该小部件将显示进度指示器(仅仅是旋转轮),而计算方法在单独的线程中运行。
这很好,除了用户仍然可以退出UITableViewController,如果他们认为它花了太长时间。 当然,这是一件好事,除了当单独的线程结束其操作时,它仍然试图调用它的委托(UITableViewController)来隐藏MBProgressHUD。 这会导致崩溃,因为由于用户已经退出UITableViewController,因此它具有dealloc
并release
'd本身。
MBProgressHUD具有以下代码来尝试阻止此操作:
if(delegate != nil && [delegate conformsToProtocol:@protocol(MBProgressHUDDelegate)]) {
if([delegate respondsToSelector:@selector(hudWasHidden)]) {
[delegate performSelector:@selector(hudWasHidden)];
}
}
但是,我的应用似乎仍然在运行这个内部代码( [delegate performSelector:@selector(hudWasHidden)]
),即使UITableViewController完全消失 - 导致应用程序崩溃。
有什么建议? 我没有运行NSZombiesEnabled
。
从您的UITableViewController viewWillDisappear,viewDidDisappear或dealloc方法,设置MBProgressHUD.delegate = nil;
一旦用户退出表控制器,hud的delegate属性指向一个解除分配的对象(=一个可能包含任何内容的内存区域)。 当计算线程结束并尝试向委托发送任何消息时,这会导致崩溃。
在表视图controller dealloc
,必须将hud委托设置为nil
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.