Цель состоит в том, чтобы иметь MKMapView, который переключается с mapType, используя UISegmentedControl.
Однако, нажимая один из сегментированных элементов управления, я получаю это в своем выводе:
2011-09-21 18: 36: 39.127 ShutterBug [2022: ec03] - [__NSCFData indexOfObject:]: нераспознанный селектор отправлен в экземпляр 0x5c90700 2011-09-21 18: 36: 39.130 ShutterBug [2022: ec03] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [__NSCFData indexOfObject:]: нераспознанный селектор, отправленный экземпляру 0x5c90700'
Вот соответствующая часть моего кода, получениеSIGABRT в первой строке changeMapType:
static NSArray *mapTypeChoices = nil;
#define MAP_STREET @"Street"
#define MAP_SATELLITE @"Satellite"
#define MAP_HYBRID @"Hybrid"
- (UISegmentedControl *)mapTypeSegmentedControl
{
if (!mapTypeChoices) mapTypeChoices = [NSArray arrayWithObjects:MAP_STREET, MAP_SATELLITE, MAP_HYBRID, nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:mapTypeChoices];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl addTarget:self action:@selector(changeMapType:) forControlEvents:UIControlEventValueChanged];
switch (self.mapView.mapType) {
case MKMapTypeStandard: segmentedControl.selectedSegmentIndex = [mapTypeChoices indexOfObject:MAP_STREET]; break;
case MKMapTypeSatellite: segmentedControl.selectedSegmentIndex = [mapTypeChoices indexOfObject:MAP_SATELLITE]; break;
case MKMapTypeHybrid: segmentedControl.selectedSegmentIndex = [mapTypeChoices indexOfObject:MAP_HYBRID]; break;
}
return [segmentedControl autorelease];
}
- (void)changeMapType:(UISegmentedControl *)segmentedControl
{
if (segmentedControl.selectedSegmentIndex == [mapTypeChoices indexOfObject:MAP_STREET]) {
self.mapView.mapType = MKMapTypeStandard;
} else if (segmentedControl.selectedSegmentIndex == [mapTypeChoices indexOfObject:MAP_SATELLITE]) {
self.mapView.mapType = MKMapTypeSatellite;
} else if (segmentedControl.selectedSegmentIndex == [mapTypeChoices indexOfObject:MAP_HYBRID]) {
self.mapView.mapType = MKMapTypeHybrid;
}
}
EDIT: отладчик показывает мне, что changeMapType: вызывается дважды при нажатии UISegmentedController только один раз ..