Вот мой код ниже:
- (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger row = [indexPath row];
NSString *contentForThisRow = nil;
NSString *contentForThisRow2 = nil;
if (mySearchBar.text > 0)
{
contentForThisRow = [self.filteredListContent objectAtIndex:row];
NSInteger noWordIndex = [self.noWords indexOfObject:contentForThisRow];
contentForThisRow2 = [self.enWords objectAtIndex:noWordIndex];
NSLog (@"if success?");
}
else
{
contentForThisRow = [self.noWords objectAtIndex:row] ;
contentForThisRow2 = [self.enWords objectAtIndex:row];
NSLog (@"else success?");
}
static NSString *kCellID = @"cellID";
//standard code here etc for this method..
}
Приведенные выше коды работают отлично, за исключением случаев, когда я использовал searchBar для фильтрации, а затем нажимал кнопку «Отмена» на панели поиска или кнопку «Поиск» на клавиатуре, а затем, когда я нажимал на свою пользовательскую кнопку «изменить» на панели навигации, приложение вылетало .
Перед тем, как я использую searchBar, после каждого изменения появляется 4 NSLog, например:
- 2011-08-15 17: 21: 24.481 Enne1 [4750: 207] еще успех?
- 2011-08-15 17: 21: 24.483 Enne1 [4750: 207] еще успех?
- 2011-08-15 17: 21: 24.484 Enne1 [4750: 207] еще успех?
- 2011-08-15 17: 21: 24.485 Enne1 [4750: 207] еще успех?
И когда я использую searchBar для фильтрации слов, появляются также 4 NSLog, как это:
- 2011-08-15 17: 19: 33.713 E1 [4744: 207] если успех?
- 2011-08-15 17: 19: 33.714 E1 [4744: 207] если успех?
- 2011-08-15 17: 19: 33.714 E1 [4744: 207] если успех?
- 2011-08-15 17: 19: 33.715 E1 [4744: 207] если успех?
Но когда после того, как я воспользовался searchBar, а затем очистил searchText либо с помощью кнопки Отмена, либо Поиск, а затем нажал кнопку «Изменить», отображается только 1 NSLog, например:
2
- 011-08-15 17: 21: 49.806 E1 [4750: 207] в случае успеха?
должно быть
.
Я что-то упустил?
РЕДАКТИРОВАТЬ 15 августа:
Я пытался
if(mySearchBar.text.length > 0)
также, но табличное представление ничего не показывает, когда я очищаю строку поиска, и появилось только 2 nslogs, то есть:
- 2011-08-15 23: 49: 06.624 E1 [5064: 207] если успех?
- 2011-08-15 23: 49: 06.626 E1 [5064: 207] если успех?
Кстати, почему он показывает 4 nslogs каждый раз, когда я вводю один алфавит в строке поиска? Разве он не должен показывать только один nslog каждый раз?
А мои коды для textDidChange:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchString
{
NSLog (@" ss: %@", searchString);
if ([searchString length] == 0) {
[self performSelector:@selector(hideKeyboardWithSearchBar:) withObject:searchBar afterDelay:0];
NSLog (@" searchstring: %@", searchString);
}
[self filterContentForSearchText:searchString];
[tableView reloadData];
NSLog (@"has reloaded!");
return;
}
Редактировать 15 августа; Это неправильно: я подозреваю, что приведенный выше код вызывает сбой приложения? не перезагружаешь таблицу как надо?
Я прав? NSLog для searchString ничего не показал ...
2-е редактирование 15 августа: я добавил NSLog (@ "ss:% @", searchString); и, конечно, он показывает алфавит (ы) каждый раз, когда я ввожу один алфавит. Так что должно быть что-то не так с mySearchBar.text> 0, как мне написать это правильно?
Между прочим, я программно добавил tableview и searchbar, делегат tableviews и источник данных связан с self, а делегат searchbars также связан с self. В InterfaceBuilder ничего нет, только UIView.