Итак, причина возникновения этой ошибки:
UIMapView is not loaded yet in the viewDidLoad.
Помещение кода в метод mapViewDidFinishLoadingMap также не является хорошей идеей, поскольку не говорится, что метод будет вызван. Этот метод не вызывается, когда плитки кэшируются (например, если у вас есть другое представление карты в вашем приложении в другом месте, увеличенном до тех же плиток).
Так что не рекомендуется помещать его в mapViewDidFinishLoadingMap.
Окончательное решение:
Создайте приватное логическое значение и установите для него значение false в viewDidLoad
BOOL _didFollowUserAlready;
Установите делегата mapview на self и добавьте этот метод:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
if(!_didFollowUserAlready)
{
_didFollowUserAlready = TRUE;
[mapView setUserTrackingMode:MKUserTrackingModeFollow animated:TRUE];
}
}