[英]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.