iPhone - CLLocationManager init возвращает ноль

Я использую специальный класс для обновления местоположения пользователя. При инициализации класса я создаю объект CLLocationManager, который будет использоваться классом

CLLocationManager *locManager = [[CLLocationManager alloc] init];
[self setLocationManager:locManager];

Строка, возвращающая ноль, это CLLocationManager * locManager = [[CLLocationManager alloc] init];, что и вызывает проблему.

Этот код в большинстве случаев отлично работает. Но на одном конкретном устройстве (версия ОС 3.1) init возвращает ноль. Есть идеи, почему CLLocationManager возвращает ноль при инициализации?

Спасибо.


person lostInTransit    schedule 12.11.2009    source источник


Ответы (1)


Когда приложение впервые инициализирует службы определения местоположения, ОС спрашивает пользователя, в порядке ли это. Если они скажут «нет», при последующих запусках можно получить ноль. Вы можете проверить это и изящно снизить функциональность.

person Ramin    schedule 12.11.2009
comment
Но при тестировании на этом устройстве я всегда нажимал кнопку ОК. В какой-то момент он разбился (опять же из-за служб определения местоположения), а с тех пор каждый раз значение для CLLocationManager равно нулю. Разве пользователь не должен получать подсказку? - person lostInTransit; 12.11.2009
comment
Я указывал на одну ситуацию, когда службы определения местоположения могут возвращать ноль (хотя технически вы должны получить locationManager: didFailWithError). Если нет, значит, происходит что-то еще. Возможно, вы захотите попробовать сбросить предупреждения о местоположении в настройках и посмотреть, позволяет ли это начать с чистого листа. - person Ramin; 12.11.2009
comment
Я предполагаю, что didFailWithError является методом CLLocationManagerDelegate, он не будет запущен, если CLLocationManager не имеет значение и установлен его делегат? Здесь сам объект CLLocationManager равен нулю. Добавление кода и выделение ошибочной строки - person lostInTransit; 12.11.2009
comment
Ооо! Надо было уделить больше внимания твоему первоначальному вопросу. Я видел такое поведение однажды, когда пользователь сказал НЕТ. Добавление защитного кода вокруг него и снижение качества работы с ним. С тех пор проблем с ним не было. Я бы предложил процесс исключения, чтобы увидеть, является ли это пользовательскими настройками, управлением памятью, приложением, ОС или устройством. Трудно сказать без дополнительной контекстной информации. - person Ramin; 13.11.2009
comment
Спасибо. Я поставил чек. Но все равно звучит подозрительно, если службы определения местоположения отключены, метод ошибки должен быть запущен. Почему значение CLLocationManager равно нулю? - person lostInTransit; 13.11.2009
comment
Звучит подозрительно. Когда я получил это, я предположил, что это было из-за всей инициализации и кеширования GPS, которые должны были произойти, но на самом деле не особо вник в это. Если вы можете надежно повторить это на этом устройстве, вы можете запустить приложение через инструменты и следить за утечками или условиями нехватки памяти. - person Ramin; 14.11.2009