<!--
{
  "availability" : [
    "iOS: 2.0.0 -",
    "iPadOS: 2.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.6.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreLocation",
  "identifier" : "/documentation/CoreLocation/CLLocationManagerDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Core Location"
    ],
    "preciseIdentifier" : "c:objc(pl)CLLocationManagerDelegate"
  },
  "title" : "CLLocationManagerDelegate"
}
-->

# CLLocationManagerDelegate

The methods you use to receive events from an associated location-manager object.

```
protocol CLLocationManagerDelegate : NSObjectProtocol
```

## Overview

The location manager calls its delegate’s methods to report location-related events to your app. Implement this protocol in an app-specific object and use the methods to update your app. For example, you might use the current location to update the user’s position on a map or you might return search results relevant only to the user’s current location.

> Important:
> Always implement the methods for handling any potential failures in addition to the methods for receiving location-related data.

Assign your delegate object to the [`delegate`](/documentation/CoreLocation/CLLocationManager/delegate) property of the [`CLLocationManager`](/documentation/CoreLocation/CLLocationManager) object before starting any services. Core Location may report a cached value to your delegate immediately after you start the service, followed by a more current value later. Check the time stamp of any data objects you receive before using them.

Core Location calls the methods of your delegate object on the runloop from the thread on which you initialized [`CLLocationManager`](/documentation/CoreLocation/CLLocationManager). That thread must itself have an active run loop, like the one found in your app’s main thread.

## Topics

### Responding to authorization changes

[`locationManagerDidChangeAuthorization(_:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManagerDidChangeAuthorization(_:))

Tells the delegate when the app creates the location manager and when the authorization status changes.

[`locationManager(_:didChangeAuthorization:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didChangeAuthorization:))

Tells the delegate its authorization status when the app creates the location manager and when the authorization status changes.

### Handling errors

[`locationManager(_:didFailWithError:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didFailWithError:))

Tells the delegate that the location manager was unable to retrieve a location value.

### Receiving location updates

[`locationManager(_:didUpdateLocations:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didUpdateLocations:))

Tells the delegate that new location data is available.

[`locationManager(_:didUpdateTo:from:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didUpdateTo:from:))

Tells the delegate that a new location value is available.

[`locationManager(_:didFinishDeferredUpdatesWithError:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didFinishDeferredUpdatesWithError:))

Tells the delegate that updates will no longer be deferred.

### Pausing location updates

[`locationManagerDidPauseLocationUpdates(_:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManagerDidPauseLocationUpdates(_:))

Tells the delegate that location updates were paused.

[`locationManagerDidResumeLocationUpdates(_:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManagerDidResumeLocationUpdates(_:))

Tells the delegate that the delivery of location updates has resumed.

### Receiving visit updates

[`locationManager(_:didVisit:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didVisit:))

Tells the delegate that a new visit-related event was received.

### Receiving heading updates

[`locationManager(_:didUpdateHeading:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didUpdateHeading:))

Tells the delegate that the location manager received updated heading information.

[`locationManagerShouldDisplayHeadingCalibration(_:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManagerShouldDisplayHeadingCalibration(_:))

Asks the delegate whether the heading calibration alert should be displayed.

### Receiving region-related updates

[`locationManager(_:didEnterRegion:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didEnterRegion:))

Tells the delegate that the user entered the specified region.

[`locationManager(_:didExitRegion:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didExitRegion:))

Tells the delegate that the user left the specified region.

[`locationManager(_:didDetermineState:for:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didDetermineState:for:))

Tells the delegate about the state of the specified region.

[`locationManager(_:monitoringDidFailFor:withError:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:monitoringDidFailFor:withError:))

Tells the delegate that a region monitoring error occurred.

[`locationManager(_:didStartMonitoringFor:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didStartMonitoringFor:))

Tells the delegate that a new region is being monitored.

[`CLRegionState`](/documentation/CoreLocation/CLRegionState)

Constants that reflect the relationship of the current location to the region boundaries.

### Receiving beacon-related updates

[`locationManager(_:didRange:satisfying:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didRange:satisfying:))

Tells the delegate that the location manager detected at least one beacon that satisfies the provided constraint.

[`locationManager(_:didFailRangingFor:error:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didFailRangingFor:error:))

Tells the delegate that the location manager couldn’t detect any beacons that satisfy the provided constraint.

[`locationManager(_:didRangeBeacons:in:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didRangeBeacons:in:))

Tells the delegate that one or more beacons are in range.

[`locationManager(_:rangingBeaconsDidFailFor:withError:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:rangingBeaconsDidFailFor:withError:))

Tells the delegate that an error occurred while gathering ranging information for a set of beacons.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)