не MKMapView вызова методов делегирования

голоса
10

В UIViewController добавить MKMapView к представлению управляется контроллером.

- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
 }

Позже в контроллере у меня есть

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
     NSLog(@done.);
}

Совершенно никогда не печатаются. Ни один из других методов делегата не дозвонился либо как MAPview: viewForAnnotation: Я использую MKMapView в другом приложении, но это, кажется, происходит на любом новом приложении я делаю. Кто-нибудь еще видел такое поведение?

РЕДАКТИРОВАТЬ:

Проблема, кажется, когда UIViewController производится делегат MKMapView, прямой подкласс NSObject, кажется, работает хорошо. Я могу работать вокруг, как это, по-прежнему кажется очень странным, так как я делал это раньше.

Задан 04/09/2009 в 14:42
источник пользователем
На других языках...                            


10 ответов

голоса
8

У меня была точно такая же проблема: я присвоила <MKMapViewDeledate> на мой контроллер, и связала делегат «владелец файла» в Interface Builder, но все же мои реализованные методы делегата не были названы.

Причина заключается в том, что с прошивкой 4, карты кэшируются, и всякий раз, когда приложение отображает кэшированную карту, то такие методы, как «mapViewDidFinishLoadingMap» не называется. Сброс «содержимое и настройки» в тренажере очищает кэшированные карты и, следовательно, решает эту проблему.

Ответил 15/01/2011 в 19:06
источник пользователем

голоса
6

Немного старая, но с прошивкой 7 есть новый метод, который мог бы работать. решить мою проблему

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Ответил 14/06/2015 в 22:48
источник пользователем

голоса
4

Может быть, вы должны пойти к IB и управления-сопротивления от MKMapView на вид Conroller, затем выберите делегата, чтобы сделать его делегатом ???

Ответил 29/01/2010 в 00:59
источник пользователем

голоса
1

У меня была аналогичная проблема с методами MKMapViewDelegate не называется. Моя проблема была установка MKCoordinateRegionMakeWithDistance и regionThatFits в -viewDidLoad контроллера () Я хотел только показать область вокруг моего дома, а не начинать с мировоззрением. Таким образом, после добавления аннотаций в viewDidLoad контроллера, я начал таймер. Когда истекает в одну секунде, я увеличить на области Я хочу с вышеперечисленным API, и огнем методов делегата. Он просто делает меня немного закружилась голова, и склонны к рвоте на мой IPad.

Теперь у меня есть дело только с предупреждениями низкой памяти штопать.

Ответил 21/05/2010 в 16:38
источник пользователем

голоса
1

может быть, совершенно очевидно, но просто проверить:

Вы сделали, что ваше заявление ViewController правильно сделано. Что-то вроде:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Ответил 04/09/2009 в 16:02
источник пользователем

голоса
0

Моя проблема заключается в том , что я забыл установить местоположение в тренажере. Перейти к Simulator -> Debug -> Location -> Custom location...и MKMapViewDelegateметоды начнут вызов

Ответил 04/04/2017 в 09:19
источник пользователем

голоса
0

У меня была аналогичная проблема в XCode 6.1 для построения прошивкой 8.1, где ни один из методов MKMapViewDelegate не были называется. В 2 приложения идентичный код привел в методах MKMapViewDelegate называют, как и ожидалось.

В ViewController.m MAPview делегат устанавливается следующим образом:

- (void)viewDidLoad {
    ...
    self.mapView.delegate = self;

В ViewController.h:

@interface myMapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end

Я вручную добавил строку IBOutlet выше в заголовочный файл, но только в приложении, где делегат методы не были получены.

Решение было удалить строку IBOutlet я вручную добавил в заголовок, а затем перейти к раскадровке и CTRL-сопротивлению от MKMapView к блоку @interface в моем ViewController.h. Идентичный IBOutlet был воссоздан в заголовочном файле, в результате чего все методы делегата были названы правильно.

Ответил 01/03/2015 в 06:55
источник пользователем

голоса
0

Я просто снова побежал в это на прошивке 7 и выяснил то, что работает постоянно. Вопрос мы, как правило, борьба с зовёт setRegion до области имеет контекст (вид визуализации). IOS, 7 добавляет новые методы делегата, представляющие все плитки, оказываемые но предварительно IOS, 7 кэшированные плитки предотвращает метод делегата mapViewDidFinishLoadingMap от вызова. Вместо этого я использую «pendingRegion» переменную, чтобы проверить, есть ли у меня «очередь» изменение региона для того, когда карта оказывается, а затем просто использовать метод viewDidAppear как сигнал карта была выводимого на экран и, следовательно, область будет иметь контекст ,

Добавьте переменную в свой заголовок:

MKCoordinateRegion pendingRegion;

Добавьте этот метод к коду:

-(void)initPendingRegion {
    pendingRegion.center = CLLocationCoordinate2DMake(0.0, 0.0);
}

Добавьте это в viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Ответил 26/09/2013 в 16:26
источник пользователем

голоса
-1

Для меня, он работал после добавления NSLocationWhenInUseUsageDescriptionстроки в Info.plist

Ответил 03/05/2015 в 12:12
источник пользователем

голоса
-2

Я также встретил такой же вопрос, как ваша. Я обнаружил, что: с iPhone SDK 3.2 - когда я создаю новый UIViewController с соответствующим XIb файлом (опция флажок в создании диалога UIViewController), методы Делегат MKMapViewDelegate никогда не называются.

Тем не менее, когда я следую ниже шагов, он работает хорошо.

  1. Создайте новый класс UIViewController (не флажок: создать файл XIb, связанный с контроллером)

  2. Создать новый файл XIb. Добавить карту с помощью Interface Builder + установка класса владельца с классом на шаге 1 + установка делегата объекта точки карты в классе владельца.

  3. Реализовать методы делегата для класса UIViewController в шаге 1.

  4. Когда я хочу использовать ViewController (с дополнительной картой), я загрузить его с пером именем ниже, например:

    MapPreviewController* mapPreviewController = [[MapPreviewController alloc] 
        initWithNibName:@"MapPreviewController" bundle:[NSBundle mainBundle]];
    
    [self.centerPanelView addSubview:mapPreviewController.view];
    

Код работает нормально. Я не знаю, какие изменения Apple, или же с файлом XIb, когда я создаю мой UIViewController с помощью мастера, но он может первопричина моей проблемы. Он берет меня за 1 день, чтобы найти это глупое решение.

Если вы нашли еще один, пожалуйста, поделитесь со мной.

благодаря

Ответил 02/05/2010 в 11:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more