Я пытаюсь использовать UISearchDisplayController для поиска с CLGeocode в качестве типов пользователей для использования с MKMapView. Контроллер моего представления имеет только две вещи: UISearchBar, связанный с UISearchDisplayController и видом карты. Я использую Раскадку.Использование UISearchViewController без базового UITableView (из раскадровки)
Обычно можно было бы сделать это с использованием основного вида таблицы и объявить там прототип ячейки, но, похоже, здесь нет способа сделать это, так как у меня нет табличного представления. Поэтому я создал подкласс UITableViewCell под названием SearchTableViewCell с соответствующим nib.
Перо содержит одну метку, с этим выходом подключен:
@interface SearchTableViewCell : UITableViewCell
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *textLabel;
@end
загружаю перо в viewDidLoad:
[self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"SearchTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"CellIdentifier"];
я получаю данные из CLGeocoder так:
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[self.geocoder geocodeAddressString:searchString completionHandler:^(NSArray *placemarks, NSError *error) {
self.placemarks = placemarks;
[self.searchDisplayController.searchResultsTableView reloadData];
}];
return NO;
}
И мой код таблицы выглядит так:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.placemarks count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *kCellID = @"CellIdentifier";
SearchTableViewCell *cell = (SearchTableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCellID forIndexPath:indexPath];
CLPlacemark *placemark = self.placemarks[indexPath.row];
NSString *addressString = CFBridgingRelease(CFBridgingRetain(ABCreateStringWithAddressDictionary(placemark.addressDictionary, NO)));
cell.textLabel.text = addressString;
return cell;
}
Часть поиска работает - когда я добираюсь до cellForRowAtIndexPath, есть данные в self.placemarks. Тем не менее, линия, dequeues новой ячейки не удается с исключением в первый раз, это называется:
'NSUnknownKeyException', reason: '[<NSObject 0x1a840d40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key textLabel.'
Моего объект клетка является уступчивым TextLabel, но мне интересно, о том, что NSObject есть в сообщении об ошибке - возвращает объект не SearchTableViewCell? Он настроен в IB для использования правильного класса. И почему метод dequeue для проверки textLabel в любом случае? Я уверен, что у меня были пользовательские ячейки таблицы, перед которыми не было поля textLabel.
Любые предложения о том, где я ошибся?