我正在尝试使用UISearchDisplayController作为用户类型使用CLGeocode进行搜索,以便与MKMapView一起使用。我的视图控制器只有两件事 - 与UISearchDisplayController关联的UISearchBar和地图视图。我正在使用故事板。
通常情况下,人们会使用基础表视图执行此操作,并在那里声明原型单元格,但由于我没有表格视图,因此似乎无法在此处执行此操作。所以我创建了一个名为SearchTableViewCell的UITableViewCell的子类,带有相关的nib。
笔尖包含一个标签,此插座已连接:
@interface SearchTableViewCell : UITableViewCell
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *textLabel;
@end
我在viewDidLoad中加载了nib:
[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;
}
我的tableview代码如下所示:
- (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中有数据。但是,使新单元格出列的行在第一次调用时失败,并出现异常:
'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字段之前我已经有了自定义表格单元格。
关于我哪里出错的任何建议?
答案 0 :(得分:0)
事实证明,不知何故,我有两个连接到textLabel - 一个适当的连接到IBOutlet而另一个连接到File的所有者。那肯定是NSObject的回归方式。
在修复之后,我在 - [NSLayoutConstraint常量]中得到断言失败。只是一时兴起我在笔尖中关闭了AutoLayout,这似乎并不需要它和presto。它现在有效。