objective-cmapkitcore-locationcurrentlocation

Xcode - CoreLocation not showing blue dot


For some reason when I launch my app it does everything correctly except show the user as blue dot on the map. It zooms in to the users current location, just no dot. Any help would be greatly appreciated.

I've added code and screenshots below for resources.

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

Project Files

Xcode Screen Shot


Solution

  • MKMapView has a showsUserLocation property. It looks like you need to turn that on.

    You can set that property in code, but if your map view is created in a storyboard scene you can just check the User Location box in the storyboard editor:

    Also: Make sure you have the appropriate key in your Info.plist to allow the app to access the user's location, and that you've granted the app appropriate permission on the device. (You can check in Settings->Privacy->Location Services.) If the app doesn't have permission to get the location, the map won't show it even if showsUserLocation is enabled.