2012-01-25 25 views
4

我正在開發一個在iOS5上運行的iPhone應用程序,並且在單擊按鈕時調用startMonitoringForRegion:desiredAccuracy:方法時無法設置地理圍欄。monitoredRegions爲空即使startMonitoringForRegion:desiredAccuracy:被調用

它在模擬器中工作正常,當我打印出monitoredRegions中的區域時,但在實際iPhone 4上運行時,monitoredRegions始終爲空。預計,didEnterRegion:didExitRegion:方法也不會被調用。

另一個令人困惑的事實是,在模擬器和iPhone 4設備上,CLLocationManagerDelegate方法didStartMonitoringForRegion:也永遠不會被調用。

希望在這裏得到一些幫助,謝謝!

編輯: 這個方法,我在一個按鈕的點擊呼叫:

-(void) queueGeofence: (CLLocationCoordinate2D)selectedBranch userCoordinate:(CLLocationCoordinate2D)userCoordinate radius: (CLLocationDegrees)radius { 
geofence = [[CLRegion alloc] initCircularRegionWithCenter:selectedBranch radius:radius identifier:@"geofence"]; 

CLLocationAccuracy acc = kCLLocationAccuracyNearestTenMeters; 

[locationManager startMonitoringForRegion:geofence desiredAccuracy:acc]; 
[CLLocationManager regionMonitoringEnabled]; 

NSLog([CLLocationManager regionMonitoringEnabled] ? @"regionMonitoringEnabled:Yes" : @"regionMonitoringEnabled:No"); 
NSLog([CLLocationManager regionMonitoringAvailable] ? @"regionMonitoringAvailable:Yes" : @"regionMonitoringAvailable:No"); 

NSLog(@"LOCATIONMANAGER monitored regions: %@", [locationManager monitoredRegions]}); 
} 

地區監測是同時啓用和使用,但monitoredRegions仍然給我倒沒什麼。

+0

如果你發佈了一些代碼,那麼你可能會得到更好的答案,這樣每個人都可以看到你的問題可能是什麼。地區可以有點挑剔,但他們並不是很難走。 –

回答

3

如果您在CLLocationManager.h看,在標題中的註釋startMonitoringForRegion:desiredAccuracy:狀態

如果具有相同標識符的區域已被用於這種應用監控,因此 將從監控中移除。這是異步完成的,可能不會立即反映在monitoredRegions中。

因此,您不應該期望[locationManager monitoredRegions]會包含您新添加的區域,因爲它是異步添加的。

您是否正在實施locationManager:monitoringDidFailForRegion:withError:的委託方法?也許這是調用而不是locationManager:didStartMonitoringForRegion:。還要注意,與現有區域具有相同標識符的區域將被刪除,因此您可能會遇到一些意外問題,因爲您正在重複使用"geofence"作爲標識符。

+0

我已經得到了代碼工作,但也發現了你提到的:該地區沒有立即反映。我所做的就是儘早使用調用啓動監視和代碼工作。 –

1

首先,您應該確定,您的應用有權使用LocationManager。當你分配你的經理時檢查它。

[CLLocationManager authorizationStatus]; 

我在啓動應用程序和拒絕許可時遇到同樣的麻煩。並刪除和重建應用程序後。我有一面旗幟,那個用戶不接受它。打開它。

+0

LocationManager正在工作,因爲我能夠確定我的當前位置等。我似乎無法開始監視任何區域,即使我專門調用方法 –

1

如果你只是通過你的NSLog,它可能不會工作。 [locationManager monitoredRegions]返回一個CLRegions的NSSet。它們不會以這種方式顯示到您的日誌中。試試這個:

NSSet *setOfRegions = [locationManager monitoredRegions]; 
for (CLRegion *region in setOfRegions) { 
    NSLog (@"region info: %@", region); 
} 
相關問題