我有一個iOS應用程序,它是一個帶有3個視圖控制器的選項卡式應用程序,所有這些應用程序都需要知道手機何時進入特定地理區域。CLLocationManager只在安裝後第一次運行應用程序時監控區域
我們監視的區域在運行時通過Web界面提供,所以我們需要定期清除CLLocationManager監視的區域並添加新的區域。 CLLocationManager對象也是管理與Web服務器連接的單例類的成員變量。
我的問題是,當應用程序第一次安裝時,區域監視工作正常。但是我第一次嘗試在之後運行它,這是第一次,區域監控不起作用。
我可以在實際手機和的iOS模擬器上看到這一點。在各個地方
-(void) initialiseLocationManager:(NSArray*)geofences
{
if(![CLLocationManager locationServicesEnabled])
{
NSLog(@"Error - Location services not enabled");
return;
}
if(self.locationManager == nil)
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
}
else
{
[self.locationManager stopUpdatingLocation];
}
for(CLRegion *geofence in self.locationManager.monitoredRegions)
{
//Remove old geogate data
[self.locationManager stopMonitoringForRegion:geofence];
}
NSLog(@"Number of regions after cleanup of old regions: %d", self.locationManager.monitoredRegions.count);
if(self.locationManager == nil)
{
[NSException raise:@"Location manager not initialised" format:@"You must intitialise the location manager first."];
}
if(![CLLocationManager regionMonitoringAvailable])
{
NSLog(@"This application requires region monitoring features which are unavailable on this device");
return;
}
for(CLRegion *geofence in geofences)
{
//Add new geogate data
[self.locationManager startMonitoringForRegion:geofence];
NSLog(@"Number of regions during addition of new regions: %d", self.locationManager.monitoredRegions.count);
}
NSLog(@"Number of regions at end of initialiseRegionMonitoring function: %d", self.locationManager.monitoredRegions.count);
[locationManager startUpdatingLocation];
}
我已經打過電話在不同的地方[的LocationManager stopUpdatingLocation],具體爲:
收到來自包含該區域的詳細信息服務器mesasge,我們運行下面的代碼AppDelegate.m文件(applicationWilLResignActive,applicationDidEnterBackground,applicationWillTerminate),但它們都沒有幫助。無論哪種方式,當我構建我的應用程序並添加一個GPX文件來模擬位置時,模擬器可以正確地獲取Web界面發送的區域。我第二次運行這個程序時,這些區域沒有被拾起。當我重新載入GPX文件時,它會再次運行,但從第二次開始,它就不再工作了。
根據API文檔,CLLocationManager甚至在終止時也保留區域的記錄(這就是爲什麼我清除了我們監視的區域的原因),但我的猜測是我的初始化例程第一次應用程序運行,但調用不應該從第二次開始調用的內容。另外,清除過程似乎並不總能奏效(NSLog語句通常顯示CLLocationManager清除爲0個區域,但並不總是)。
任何想法爲什麼這不起作用?