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