2012-05-23 64 views
1

我有一個應用程序,我需要使用StartMonitoringForRegion。 當我把下面的代碼放在應用程序didFinishLaunchingWithOptions它的工作。startMonitoringForRegion不總是工作

[loc startUpdatingLocation]; 
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(21.456372,39.287972); 
CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:coord radius:200 identifier:@"C"]; 
[self.locationManager startMonitoringForRegion:region desiredAccuracy:50]; 

但是當我在另一個視圖中使用相同的代碼,它不工作! 我嘗試使用下面的代碼來執行主線程的代碼:

if (![NSThread isMainThread]) 
{ 
    [self performSelectorOnMainThread:@selector(MonitorRegion:) withObject:pr waitUntilDone:NO]; 
    return; 
} 

,但它仍然無法正常工作!

爲什麼代碼在didFinishLaunchingWithOptions中工作,而不是在其他視圖中工作!

是否有任何情況下區域監視器可能無法正常工作?

回答

2

經過搜索和不同的試驗,我想出瞭如何解決它。

只是爲了使didEnterRegion和didExitRegion正常工作,該視圖必須始終可見並且始終運行。

我把所有東西都移到了appDelegate,現在它正在工作。

+0

真的嗎?聽起來像其他事情正在發生。如果視圖需要可見,那麼區域監控的重點是什麼? –

+0

是的,應該有一個「擦循環線程」檢查這兩個鏈接http://stackoverflow.com/a/8108274/857865和https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/多線程/ RunLoopManagement/RunLoopManagement.html#// apple_ref/DOC/UID/10000057i-CH16-SW1 – Kassem