我在表格視圖中實施了一個搜索欄。一切都好。爲了定製原因,我確實在視圖控制器中嵌入了兩者。由於此時應用程序在搜索欄中輸入第一個字符後會凍結。之後暫停/取消暫停應用顯示debuger中的不同點,因此該應用似乎正在運行,並且在顯示屏中可以看到我在鍵盤上鍵入的高位字符(更大)。在玩了一段時間後,我發現,當我第一次選擇搜索欄時,不要輸入任何內容並點擊取消,這可以解決問題。在此之後,我可以按預期使用搜索欄。在搜索欄中鍵入第一個字符後,應用凍結
我在網上搜索了幾天,但沒有找到任何提示來解決這個問題。所以任何幫助是值得歡迎的
這裏我的代碼:
-(void)viewDidLoad
[super viewDidLoad];
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"PhaseHintergrund"]];
[tempImageView setFrame:self.tableView.frame];
self.tableView.backgroundView = tempImageView;
self.searchItem = nil;
[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"Suchleiste"]forState:UIControlStateNormal];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,0,320,44)];
searchBar.placeholder = @"Symptomsuche";
UIImage *myImage = [UIImage imageNamed: @"NavbarTransparent"];
searchBar.backgroundImage = myImage;
searchBar.delegate = self;
self.tableView.dataSource = self;
self.tableView.delegate = self;
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
self.searchController.searchResultsTableView.separatorColor = self.tableView.separatorColor;
self.searchController.searchResultsTableView.backgroundView = tempImageView;
self.searchController.searchResultsTableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.searchController.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.searchController.delegate = self;
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
[self.tableView reloadData];
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = nil;
cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
[self configureCell:cell atIndexPath:indexPath];
return cell;
-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
UITextView *symptom = (UITextView*) [cell viewWithTag:2];
symptom.text = (NSString*)[object valueForKey:@"name"];
-(BOOL)searchDisplayController:(UISearchDisplayController *)_controller shouldReloadTableForSearchString:(NSString *)searchString
self.searchItem = searchString;
self.fetchedResultsController = nil;
return YES;
-(void)searchDisplayController:(UISearchDisplayController *)_controller willUnloadSearchResultsTableView:(UITableView *)tableView
self.searchItem = nil;
self.fetchedResultsController = nil;
[self.tableView reloadData];
編輯 所有UISearchDisplayController委託方法設置斷點,我發現,在錯誤的情況下(使用搜索欄上第一次在沒有取消之前)的方法searchDisplayController: didLoadSearchResultsTableView:將不會被執行。所以在我看來,這個時候沒有活躍的tableview,這可能導致問題/錯誤。
所以問題是我失蹤或在初始化中做錯了,取消搜索正在爲我修復?
儀器告訴你什麼?運行時間分析器並查看發生了什麼。 –
時間剖析器顯示了高度的1/4。我在我的quadcore上使用了這種方法,即一個內核處於滿載狀態。 – MPajak
並查看欄下方的數據(屏幕下半部分)。什麼代碼正在運行? –