Xcode - CoreLocation не показывает синюю точку

По какой-то причине, когда я запускаю свое приложение, оно все делает правильно, кроме отображения пользователя в виде синей точки на карте. Он увеличивает текущее местоположение пользователя, просто без точки. Любая помощь будет принята с благодарностью.

Я добавил код и скриншоты ниже для ресурсов.

FrontViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface FrontViewController : UIViewController <CLLocationManagerDelegate>

{
   CLLocationManager *objLocationManager;
   double latitude_UserLocation, longitude_UserLocation;
}

   @property (weak, nonatomic) IBOutlet MKMapView *objMapView;

@end

FrontViewController.m

#import "FrontViewController.h"
#import "SWRevealViewController.h"

@interface FrontViewController()

// Private Methods:
- (IBAction)pushExample:(id)sender;

@end

@implementation FrontViewController

@synthesize objMapView;

- (void)viewDidLoad
{
   [super viewDidLoad];
   [self loadUserLocation];

   //self.title = NSLocalizedString(@"Front View", nil);

   SWRevealViewController *revealController = [self revealViewController];

   [revealController panGestureRecognizer];
   [revealController tapGestureRecognizer];

   [self.navigationController.navigationBar addGestureRecognizer:revealController.panGestureRecognizer];

UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"reveal-icon.png"]
    style:UIBarButtonItemStyleBordered target:revealController action:@selector(revealToggle:)];

  self.navigationItem.leftBarButtonItem = revealButtonItem;

    UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BSEEK-Logo.png"]];
    imageView.contentMode = UIViewContentModeScaleAspectFit;

    UIView* titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 84, 84)];
    imageView.frame = titleView.bounds;
    [titleView addSubview:imageView];

    self.navigationItem.titleView = titleView;
}


- (IBAction)pushExample:(id)sender
{
     UIViewController *stubController = [[UIViewController alloc] init];
     stubController.view.backgroundColor = [UIColor whiteColor];
     [self.navigationController pushViewController:stubController animated:YES];
}

- (void) loadUserLocation
{
    objLocationManager = [[CLLocationManager alloc] init];
    objLocationManager.delegate = self;
    objLocationManager.distanceFilter = kCLDistanceFilterNone;
    objLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
      if ([objLocationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [objLocationManager requestWhenInUseAuthorization];
      }
      [objLocationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0)
{
    CLLocation *newLocation = [locations objectAtIndex:0];
    latitude_UserLocation = newLocation.coordinate.latitude;
    longitude_UserLocation = newLocation.coordinate.longitude;
    [objLocationManager stopUpdatingLocation];
    [self loadMapView];
}

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{
    [objLocationManager stopUpdatingLocation];
}

- (void) loadMapView
{
    CLLocationCoordinate2D objCoor2D = {.latitude =  latitude_UserLocation, .longitude =  longitude_UserLocation};
    MKCoordinateSpan objCoorSpan = {.latitudeDelta =  0.2, .longitudeDelta =  0.2};
    MKCoordinateRegion objMapRegion = {objCoor2D, objCoorSpan};
    [objMapView setRegion:objMapRegion];
}

@end

Файлы проекта

Снимок экрана Xcode


person ryan    schedule 11.09.2019    source источник


Ответы (1)


MKMapView имеет свойство showsUserLocation. Похоже, вам нужно включить это.

Вы можете установить это свойство в коде, но если ваше представление карты создано в сцене раскадровки, вы можете просто установить флажок Местоположение пользователя в редакторе раскадровки:

Также: убедитесь, что в вашем Info.plist есть соответствующий ключ, позволяющий приложению получить доступ к местоположению пользователя, и что вы предоставили приложению соответствующее разрешение на устройстве. (Можно проверить в Настройки->Конфиденциальность->Службы определения местоположения.) Если у приложения нет разрешения на получение местоположения, карта не покажет его, даже если showsUserLocation включен.

person Caleb    schedule 11.09.2019
comment
Спасибо, я посмотрю. Пока все делал программно. Это может быть проблемой. - person ryan; 11.09.2019
comment
@Ryan Я предположил, что вы использовали раскадровку, потому что вы не показывали код, создающий представление карты, но устанавливаете ли вы свойство в раскадровке или в коде, вообще не имеет значения - любой способ подходит, если вы установили Это. И снова убедитесь, что вы добавили соответствующий ключ в свой Info.plist (например, NSLocationWhenInUseUsageDescription) и предоставили разрешение. - person Caleb; 11.09.2019