簡體   English   中英

[UITableView reloadData]導致iOS應用程序崩潰

[英]IOS App Crashes with [UITableView reloadData]

我的應用程序崩潰,並在下面顯示錯誤。

線程0崩潰:

0   libobjc.A.dylib                 0x3b5d7b26 objc_msgSend + 6

1   UIKit                           0x339c74f4 -[UIResponder(Static) _setFirstResponder:] + 40

2   UIKit                           0x339c74f4 -[UIResponder(Static) _setFirstResponder:] + 40

3   UIKit                           0x339b3000 -[UIResponder resignFirstResponder] + 248

4   UIKit                           0x339e4e9c -[UITableView reloadData] + 224

5   CSModule                        0x001588e2 -[UIBubbleTableView reloadData] 

我嘗試解決問題,但沒有得到解決方案。 請幫助我解決問題。

我已經在表cellview上創建了一個帶有標簽的自定義視圖,當我們點擊該自定義視圖時,它將顯示帶有復制選項的UIMenuController。 我的自定義視圖手柄點擊手勢如下

-(void) handleTapGesture:(UIGestureRecognizer*) recognizer{

    if (self.window == nil) {
        NSLog(@" \n\n\n\n Window is null \n\n\n\n\n\n");
        return;
    }

    [self becomeFirstResponder];

    CGRect targetRectangle = CGRectMake(self.bounds.size.width/2, 2, 2, 2);

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    [menuController setTargetRect:targetRectangle inView:self];
    [menuController setMenuVisible:YES animated:YES];
} 

如果我沒有處理點擊手勢並且沒有顯示此UIMenuController,則不會產生任何崩潰。

崩潰隨機發生,我在UITableView中實現了Pull刷新,在Pull上我從服務器下載了以前的數據並重新加載tableview,同時我在單元格中點擊自定義視圖,有時會發生崩潰。

有時發生崩潰的另一件事是在handleTapGesture函數作為波紋管發生。

線程0崩潰:

0 libobjc.A.dylib 0x3b5d7b26 objc_msg發送+ 6

1 UIKit 0x339c74f4-[UIResponder(Static)_setFirstResponder:] + 40

2 UIKit 0x339c74f4-[UIResponder(Static)_setFirstResponder:] + 40

3 UIKit 0x339c74f4-[UIResponder(Static)_setFirstResponder:] + 40

4 UIKit 0x339b2f92-[UIResponder resignFirstResponder] + 138

5 UIKit 0x3398d958-[UIResponder成為FirstResponder] + 308

6 UIKit 0x3398dc46-[UIView(Hierarchy)成為FirstResponder] + 102

7 CSModule 0x0006ceb2-[UIChatFootageTextView handleTapGesture:]

請如果您有解決此問題的想法,請幫助我解決。

FWIW,我在ios8 GM上的應用程序中發現了同樣的問題。 問題似乎是,如果您在沒有記錄要顯示的UITableView上調用reloadData(IE新安裝的應用程序),它將崩潰。

在調用該方法之前,我必須開始檢查以確保要嘗試顯示的記錄數大於0 ...我個人認為這是ios8中的錯誤。 如果我要求視圖重新加載數據,但是沒有數據,它應該處理它。 在請求重新加載視圖之前,我不必評估數據的存在。打破了整個MVC設計模式IMO。

祝大家好運。

以前,我遇到過崩潰問題。 按照我的想法,由於我將自定義視圖設置為顯示UIMenuController的第一響應者,因此可見UIMenuController是必需的。 因此,我無法刪除該聲明。

為了解決這個問題,我將UIMenuController設置為可見后立即以第一響應者的身份辭職。 現在我的應用程序沒有得到隨機崩潰。

-(void) handleTapGesture:(UIGestureRecognizer*) recognizer{

    if (self.window == nil) {
        NSLog(@" \n\n\n\n Window is null \n\n\n\n\n\n");
        return;
    }

    [self becomeFirstResponder];

    CGRect targetRectangle = CGRectMake(self.bounds.size.width/2, 2, 2, 2);

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    [menuController setTargetRect:targetRectangle inView:self];
    [menuController setMenuVisible:YES animated:YES];

    [self resignFirstResponder];
}

UILabel不允許becomeFirstResponder 您必須將UILabel子類化才能實現此目的。

@interface CustomLabel : UILabel
@end

@implementation CustomLabel

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return (action == @selector(copy:));
}

- (void)copy:(id)sender {
    [[UIPasteboard generalPasteboard] setString:self.text];
}

@end

使用此自定義標簽,然后在其中添加手勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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