簡體   English   中英

當用戶退出UITableView並且MBProgressHUD在單獨的線程中運行時,iPhone應用程序崩潰

[英]iPhone app crashes when user exits UITableView with MBProgressHUD running in separate thread

在我的應用程序中,我有一個UITableViewController,它從我的Core Data商店加載計算數據。 這可能需要相當長的時間並且掛起主線程,因此為了給用戶提供可視反饋,我已經安裝了MBProgressHUD小部件,該小部件將顯示進度指示器(僅僅是旋轉輪),而計算方法在單獨的線程中運行。

這很好,除了用戶仍然可以退出UITableViewController,如果他們認為它花了太長時間。 當然,這是一件好事,除了當單獨的線程結束其操作時,它仍然試圖調用它的委托(UITableViewController)來隱藏MBProgressHUD。 這會導致崩潰,因為由於用戶已經退出UITableViewController,因此它具有deallocrelease '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM