Сбой базового демонстрационного приложения iOS для GoogleMaps - нераспознанный селектор отправлен на экземпляр
Я пытаюсь запустить базовый код iOS SDK демо. Я создал ключ API, и он загружается нормально. Хотя я перенес код из viewDidLoad в loadView, эффект остается. Смотрите следующий код
-(void)loadView{
// Create a GMSCameraPosition that tells the map to display the
// coordinate -33.86,151.20 at zoom level 6.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:6];
_mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
_mapView.myLocationEnabled = YES;
self.view = _mapView;
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = @"Sydney";
marker.snippet = @"Australia";
marker.map = _mapView;
}
Камера создана, но когда эта строка выполняется
_mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
исключение NSEx выдается с описанием -> -[GMSMapView animateToCameraPosition:]: нераспознанный селектор, отправленный экземпляру.
* Нагрузочное приложение из - за неперехваченное исключение 'NSInvalidArgumentException', причина: '-[GMSMapView animateToCameraPosition]: непризнанный селектор направил к экземпляру 0x14dbb870' * стек Первый бросок вызова: (0x2f462f4b 0x39cd96af 0x2f4668e7 0x2f4651cb 0x2f3b44d8 0x4cebe9 0x4cd78f 0x4ccc41 0x4ccb3d 0x21ced5 0x31bda1bd 0x31bda139 0x1d4b27 0x1d4a83 0x1d51cd 0x31bda37b 0x31c850f1 0x31c85007 0x31c845e3 0x31c8430d 0x31c8407d 0x31c84015 0x31bd5da3 0x3185cc6b 0x3185847b 0x3185830d 0x31857d1f 0x31857b2f 0x31bce0c3 0x2f42e1cd 0x2f42bb71 0x2f42beb3 0x2f396c27 0x2f396a0b 0x34097283 0x31c3a049 0xf58b1 0x3a1e1ab7) LibC++abi.dylib: завершение с неперехваченного исключением типа NSException
9 ответов
Я думаю, что вы, возможно, забыли сделать класс делегатом GMSMapView. Бит GMSMapViewDelegate после () должен находиться между <>
Я не назначаю этого делегата, так как Googles Base Code не назначает его. Мне, к счастью, удалось заставить его работать. В документации Google на Картах Google говорится следующее:
Выберите свой проект, а не конкретную цель, и откройте вкладку "Настройки сборки". В разделе "Другие флаги компоновщика" добавьте -ObjC. Если эти параметры не отображаются, измените фильтр на панели "Параметры сборки" с "Основные" на "Все".
Но их пример проекта, после моего изучения, имеет установленный флаг на цель. Установка его на цель сборки в моем проекте в моем случае помогла, и мой опубликованный код работает нормально.
Добавьте -ObjC в GoTo вашего проекта: Нажмите на ваш проект-> Цели-> Настройка сборки-> Поиск (Другие флаги компоновщика) -> Установить (-ObjC). См. Снимок экрана:
Скорее всего, вы забыли сделать это: (как указано в документации Google)
Выберите свой проект, а не конкретную цель, и откройте вкладку "Настройки сборки". В разделе "Другие флаги компоновщика" добавьте -ObjC. Если эти параметры не отображаются, измените фильтр на панели "Параметры сборки" с "Основные" на "Все".
У меня была такая же ошибка, потому что я по ошибке написал -objC вместо -ObjC (с заглавной O)
если это кому-то поможет
Важно отметить, что вы должны добавить -ObjC в раздел "Другие флаги компоновщика" в вашем проекте… НЕ в вашей конкретной цели.
Другие люди упомянули следующий раздел из документации Google
Выберите свой проект, а не конкретную цель, и откройте вкладку "Настройки сборки". В разделе "Другие флаги компоновщика" добавьте -ObjC. Если эти параметры не отображаются, измените фильтр на панели "Параметры сборки" с "Основные" на "Все".
Однако до тех пор, пока я не добавил флаг -ObjC в раздел "Другие флаги компоновщика" своих проектов, а НЕ целевой "Другие флаги компоновщика", я не смог устранить нераспознанную ошибку селектора.
Существует всего несколько модификаций, которые вам нужно сделать.
- Дайте имя класса пользовательского UIView как "GMSMapView".
Тогда сделайте выход к своему классу.
@IBOutlet var locationMapView: GMSMapView!
В ViewDidLoad() добавьте следующий код.
let camera = GMSCameraPosition.camera (withLatitude: 10.1518, longitude: 76.3930, zoom: 6.0)
self.locationMapView.camera = camera let initialLocation = CLLocationCoordinate2DMake(10.1518, 76.3930) let marker = GMSMarker(position: initialLocation) marker.title = "Kochi" marker.snippet = "Kerala" marker.map = locationMapView marker.snippet = "Kerala"
Я думаю, что вы, возможно, забыли сделать класс делегатом GMSMapView. Бит GMSMapViewDelegate после () должен находиться между <>
@interface StructuredGeocoderViewController () GMSMapViewDelegate
@end
@implementation StructuredGeocoderViewController {
GMSMapView *_mapView;
GMSGeocoder *_geocoder;
}
- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
longitude:151.2086
zoom:12];
_mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
_mapView.delegate = self;
_geocoder = [[GMSGeocoder alloc] init];
self.view = _mapView;
}