2015-04-19 3 views
1

Прежде чем кто-нибудь задается вопросом, да, я прочитал другие решения, моя программа недавно загадочно сломалась. Я не внес никаких изменений в моем коде, и только сегодня пытались запустить моделирование для друга, чтобы взглянуть на мое приложение, и я получаю Страшный:CLLocationManager сломался. Больше не обновляйте местоположение

Попытка запуска обновлений местоположения MapKit без запроса местоположения авторизации. Необходимо сначала вызвать [CLLocationManager requestWhenInUseAuthorization] или - [CLLocationManager requestAlwaysAuthorization].

Ну я проверил мой PLIST да и

NSLocationAlwaysUsageDescription 

и

NSLocationAlwaysUsageDescription 

все еще там.

Вот мой метод viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [mainMapView setDelegate:self]; 
    [mainMapView setShowsUserLocation:YES]; 

    [manager setDelegate:self]; 
    [manager requestWhenInUseAuthorization]; 
    [manager requestAlwaysAuthorization]; 
    [manager setDistanceFilter:kCLDistanceFilterNone]; 
    [manager setDesiredAccuracy:kCLLocationAccuracyBest]; 
    [manager startUpdatingLocation]; 

    [search setDelegate:self]; 
    [search setAlpha:0]; 

    annotationArray = [[NSMutableArray alloc]init]; 

    model = [[DataModel alloc]init]; 
} 

Кто-нибудь есть предложения?

+0

Где вы начинаете менеджер? Покажите нам код. –

+0

У Пола был ответ: я запускаю менеджер в отдельном методе, который не вызывался. Спасибо, что указали это. Я ненавижу простые недочеты ... –

+0

Нет проблем, я сделаю это ответом, а не комментарием. Таким образом, мы можем получить некоторые поддельные интернет-точки для этого. –

ответ

0

Почему вы используете как разрешение просит

[manager requestWhenInUseAuthorization]; [manager requestAlwaysAuthorization];?

Вы добавили правильные ключи для разрешений на файл .plist?

NSLocationWhenInUseUsageDescription или NSLocationAlwaysUsageDescription

+0

Да, оба ключа находятся в моем info.plist с приглашением пользователя для строкового значения. Я использую оба запроса разрешения из удобства. Когда я запускаю симуляцию, я буду комментировать один или другой из –

+0

Просто интересно, если вы используете симулятор, вы сказали симулятору имитировать местоположение? –

0

Поль Сезанн указал мой неловкое надзор. Спасибо вам большое за ваш ответ. Я инициализировал моего менеджера в отдельном методе, который не вызывался. Оказывается, я фактически использовал более старую версию из моего репо, чем самый последний.

0

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

Другим распространенным способом получения этого отказа является инициализация вашего менеджера, но не назначение его в собственность. Когда вы запускаете ARC, он будет выпущен, когда он больше не будет доступен. Просто сделайте это свойство в вашем объекте контроллера вида.

Смежные вопросы