Определение местоположения в симуляторе WatchOS не удалось

Как смоделировать локацию для симулятора watchOS?

использование с запросом

- (void) requestLocation {
    locationManager = [CLLocationManager new];

    locationManager.delegate = self;

    [locationManager requestWhenInUseAuthorization];
    [locationManager requestLocation];
}

Всегда ловлю ошибку:

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
        // Error here if no location can be found
}

Ошибка NSError * domain: @"kCLErrorDomain" - code: 0 0x7a867970


person Vyacheslav    schedule 18.08.2016    source источник


Ответы (1)


Чтобы определение местоположения работало в симуляторе часов, вам также необходимо установить симулятор местоположения iPhone. Я предлагаю вам выполнить шаги как

  1. Установите местоположение в симуляторе iPhone (Отладка -> Местоположение -> Пользовательское местоположение)
  2. Установите местоположение в симуляторе часов (Отладка -> Местоположение -> Пользовательское местоположение)
  3. Иногда местоположение в симуляторе iPhone сбрасывается на «Нет» при запуске приложения watchkit. следовательно, поставьте точку останова перед кодом расширения часов, прежде чем вы получите доступ к местоположению. Местоположение проверки установлено в обоих симуляторах.

Надеюсь это поможет.

Пример кода в быстром,

class LocationManager: NSObject, CLLocationManagerDelegate
{
static let sharedInstance = VCLocationManager()
private var locationManager : CLLocationManager?

private override init()
{

}

func initLocationMonitoring()
{
    //didChangeAuthorizationStatus is called as soon as CLLocationManager instance is created.
    //Thus dont check authorization status here because it will be always handled.

    if locationManager == nil
    {
        locationManager = CLLocationManager()
        locationManager?.desiredAccuracy = kCLLocationAccuracyBest
        locationManager?.delegate = self
    }
    else
    {
        getCurrentLocation()
    }
}

func getCurrentLocation()
{
    let authorizationStatus = CLLocationManager.authorizationStatus()
    handleLocationServicesAuthorizationStatus(authorizationStatus)
}

 func handleLocationServicesAuthorizationStatus(status: CLAuthorizationStatus)
{
    switch status
    {
    case .NotDetermined:
        handleLocationServicesStateNotDetermined()
    case .Restricted, .Denied:
        handleLocationServicesStateUnavailable()
    case .AuthorizedAlways, .AuthorizedWhenInUse:
        handleLocationServicesStateAvailable()
    }
}

func handleLocationServicesStateNotDetermined()
{
    locationManager?.requestWhenInUseAuthorization()
}

func handleLocationServicesStateUnavailable()
{
    //Ask user to change the settings through a pop up.
}

func handleLocationServicesStateAvailable()
{
    locationManager?.requestLocation()
}

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus)
{
    handleLocationServicesAuthorizationStatus(status)
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
    guard let mostRecentLocation = locations.last else { return }
    print(mostRecentLocation)
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
{
    print("CL failed: \(error)")
}
 }
person vkhemnar    schedule 31.08.2016
comment
Я успешно могу смоделировать местоположение в моем приложении для часов, используя вышеупомянутые шаги. - person vkhemnar; 31.08.2016
comment
До этого я добавил ключи NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription в Info.plist. В коде я не вызываю requestLocation сразу после создания locationManager, потому что при создании этого объекта он автоматически вызывает didChangeAuthorizationStatus. В этой функции я проверяю статус, и если это AuthorizedAlways или AuthorizedWhenInUse, я вызываю requestLocation - person vkhemnar; 31.08.2016
comment
Вкратце, я бы сказал, что тот же код, который работал в симуляторе iPhone с теми же настройками, не работает в watchOS. - person Vyacheslav; 31.08.2016