2014-09-15 6 views
2

Я пытаюсь переместить приложение iOS7 с помощью MKMapview для поддержки iOS8. Однако я не мог получить новый запрос для пользователей, чтобы они могли правильно расположить свои места. Я создаю свой MKMapView на раскадровке, и делегат настроен и отлично работает на iOS7. Вот то, что я добавил в поддержку iOS8 Место обмена:iOS 8 Ошибка запроса местоположения пользователя MKMapView

myMapView.h

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

@interface myMapView : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> 

@property (strong, nonatomic) IBOutlet MKMapView *mapView; 
@property (strong, nonatomic) CLLocationManager *locationManager; 

myMapView.m

//Code omitted 
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
//Code omitted 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

    if(IS_OS_8_OR_LATER) { 
     //[self.locationManager requestWhenInUseAuthorization]; 
     [self.locationManager requestAlwaysAuthorization]; 
     [self.locationManager startUpdatingLocation]; 
    } 
    [self.mapView setShowsUserLocation:YES]; 
    [self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]; 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } }; 
    region.center.latitude = self.locationManager.location.coordinate.latitude; 
    region.center.longitude = self.locationManager.location.coordinate.longitude; 
    region.span.latitudeDelta = 0.0187f; 
    region.span.longitudeDelta = 0.0137f; 
    [self.mapView setRegion:region animated:YES]; 

    _initialPosition = NO; 
} 

Также я поставил NSLocationAlwaysUsageDescription ключ и его значение в моем InfoPlist, который показывает правильное сообщение, предлагая пользователю поделиться своим местоположением.

К сожалению, функция делегата -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations никогда не вызывается. Хотя каждый раз при загрузке viewController вызывается [self.locationManager startUpdatingLocation], но делегат, похоже, не отвечает на него. Есть ли проблема в том, как я установил делегат или есть что-то еще, что я здесь отсутствует?

UPDATE: Кажется, что мой gpx-файл не вызывается при запуске. Я освобождал и перезарядил свой файл местоположение, даже изменено на местоположение по умолчанию, но местоположение не найдено: Domain=kCLErrorDomain Code=0

UPDATE 2: Вот SS из параметров, которые я на самом деле удалось с запросом пользователя, но не удается получить/обновить местоположение независимо от того, сколько я обновляю. App privacy level: Location sharing always http://barisaltop.com/location.png

Спасибо!

+0

Такая же проблема для меня тоже. Вы нашли решение по этой проблеме? –

ответ

7

У меня была такая же проблема несколько дней назад. Раствор добавлять string ключи NSLocationAlwaysUsageDescription (для [CLLocationManager requestAlwaysAuthorization]) или NSLocationWhenInUseUsageDescription (для [CLLocationManager requestWhenInUseAuthorization]) к вашему Поддержка файлов/Info.plist

Вы также можете редактировать исходный код Info.Plist с Щелкните правой кнопкой мыши> Открыть как> Исходный код и добавьте следующие строки:

<!-- for requestAlwaysAuthorization --> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>Explain for what are you using the user location</string> 
<!-- for requestWhenInUseAuthorization --> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>Explain for what are you using the user location</string> 

Надеется, что это помогает.

+0

К сожалению, я уже сделал это и упомянул об этом в моем первоначальном вопросе. После дальнейшего рассмотрения я подозрюю, что это ошибка файла схемы или gpx. Я буду тестировать его на машине iOS8 и обновить свою проблему. –

+0

Упс, я пропустил эту часть. Сожалею! :) – merlos

1

Наконец-то мне удалось запустить файл gpx на симуляторе. Похоже, что после установки Xcode 6 в первый раз может возникнуть ошибка, вызывающая симуляцию файлов gpx. Вот как я преодолел эту проблему:

  1. Я удалил мое приложение с имитатором
  2. Под app-> Возможности включена Фон Modes-> Обновления Расположение
  3. запустить приложение и дайте ему установить на тренажере
  4. Разрешить доступ, и я смог найти пользователя с помощью GPX
  5. После этого я отключил обновления местоположения.

Я не знаю, почему, но это сделало трюк для меня.

+0

У меня такая же проблема. Не могу заставить его работать в моем iPod touch. Что может быть причиной? – Sreejith