Индикатор строки состояния CoreLocation GPS не исчезает - PullRequest
1 голос
/ 29 ноября 2011

Я полностью озадачен проблемой с использованием CoreLocation.

Я проверил некоторые другие вопросы и в Google, но, похоже, не могу найти никого, кто сталкивался с этой конкретной проблемой.

Я использую CoreLocation в своем приложении, и когда я звоню [manager startUpdatingLocation], появляется маленькая синяя стрелка в строке состояния, и служба запускается, и все хорошо.

В приложении у меня есть UITabBarController, теперь только первая вкладка использует CoreLocation, поэтому в моем первом методе TabController viewDidDisappear я вызываю [manager stopUpdatingLocation]

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

Однако, если сделать что-то на первой вкладке, она автоматически переключится на другую вкладку через [self.tabBarController setSelectedIndex:1], когда это происходит, синяя стрелка в строке состояния НЕ исчезает, и даже если я постоянно пролистываю вкладки,Теперь w в основном застрял там до тех пор, пока приложение активно (хотя оно исчезает, если приложение переходит в фоновый режим, но вновь появляется на любой вкладке и остается там, как и раньше, если оно снова становится активным).

Теперь я подумал, что, возможно, изменение вкладок программно не вызывает viewDidDisappear, поэтому я поставил точку останова, но она действительно вызывается.

Тогда я подумал ... Хорошо, возможно, еслиЯ звоню [manager stopUpdatingLocation] как раз перед тем, как позвонить [self.tabBarController setSelectedIndex:1], это решило бы проблему, но это тоже ничего не дало.

Теперь я потерян для идей, и любая помощь будет принята с благодарностью.

PS: я проверил, не вызваны ли все еще методы делегата CoreLocation, и они больше не вызываются, если не открыта начальная вкладка, поэтому кажется, что CoreLocation остановлен.Тем не менее, с точки зрения пользователя это не так.

РЕДАКТИРОВАТЬ: Похоже, что это может быть проблема с некоторыми сторонними библиотеками, так что на самом деле это не то, чтоможно ответить

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Индикатор не исчезнет, ​​пока вы не отпустите CLLocationManager.

РЕДАКТИРОВАТЬ: Мой первоначальный ответ был неверным, индикатор должен действительно исчезнуть при вызове stopUpdatingLocation.

РЕДАКТИРОВАТЬ 2: Я создал базовое тестовое приложение, и вызов stopUpdatingLocation в viewDidDisappear действительно приводит к исчезновению индикатора в моем случае.Код с первого вида контроллера ниже:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:YES];

    if (locationManager == nil) {
        self.locationManager = [[[CLLocationManager alloc] init] autorelease];
        self.locationManager.delegate = self;
    }

    [self.locationManager startUpdatingLocation];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(20, 20, 280, 40);
    [button setTitle:@"Go to Tab 2" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [self.locationManager stopUpdatingLocation];
}

- (void)buttonTapped {
    [self.tabBarController setSelectedIndex:1];
}
0 голосов
/ 14 мая 2012

Таким образом, настоящая проблема была связана со сторонними библиотеками с закрытым исходным кодом, которые я не мог контролировать, поэтому на этот вопрос нет реального ответа

...