2011-01-30 7 views
6

Qualcuno sa alcuna conoscenza di utilizzare questo:Nucleo di monitoraggio regione Località

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

Sto cercando di implementare nel mio progetto, ma:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

non viene mai essere chiamato?

Qualcuno ha un codice di esempio o sa perché questo sta accadendo?

Il mio codice è come segue. Ho creato un metodo come questo nella mia classe LocationManager:

- (void) locationManagerStartMonitoringRegion:(CLRegion *)region withAccuracy:(CLLocationAccuracy)accuracy { 
    NSLog(@"Start Monitoring"); 
    [locationManager startMonitoringForRegion:region desiredAccuracy:accuracy]; 
    NSLog(@"Monitored Regions: %i", [[locationManager monitoredRegions] count]); 
} 

Ho poi chiamare in questo modo:

CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(51.116261, -0.853758);  
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:150 identifier:[NSString stringWithFormat:@"grRegion%i", value]]; 

[locationManager locationManagerStartMonitoringRegion:grRegion withAccuracy:kCLLocationAccuracyBest]; 

ricevo NSLog dispone di:

2011-01-30 19 : 52: 26.409 TestingLocation [10858: 307] Avvia monitoraggio

2011-01-30 19: 52: 27.103 TestingLocation [10858: 307] Regioni monitorate:

Ma mai ottenere un NSLog da:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region  { 
    NSLog(@"Entered Region"); 
} 

o

- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error { 
    NSLog(@"monitoringDidFailForRegion: %@",error); 
} 

Grazie

+0

Potresti pubblicare il codice che stai utilizzando? È difficile aiutare senza contesto. – Jumhyn

+0

Codice ora aggiunto al post originale sopra. – jodm

+0

@jodm sta ancora affrontando questo problema. hai trovato una soluzione per questo. sei in grado di attivare didEnterRegion. aiuto gentile con un esempio operativo –

risposta

5

Avrai bisogno di spostare piuttosto un lungo cammino per la roba regione di monitoraggio a lavorare . La sua attuale granularità sembra essere basata su quando viene trasferita da una torre di celle a un'altra - nei miei test, ho dovuto spostarmi di un miglio o più per registrarmi che avevo definitivamente lasciato una piccola regione che avrei impostato.

+1

Questa mattina sulla strada per l'ufficio ho registrato circa 5 punti sulla strada e 3 di loro attivati. Questo è provocatoriamente il caso. didEnterRegion viene chiamato solo quando si modifica la torre della cella O si verifica un cambiamento significativo della posizione. Questo non aiuta il contesto che volevo usare il monitoraggio della regione :( – jodm

+0

@jodm, so che questo era di oltre un anno fa ma le cose sono migliorate? Ho lo stesso problema in cui avevo punti che non si sarebbero attivati ​​o che Si innescherà molto tardi. Ci deve essere un modo migliore .. –

+0

Posso confermare che il monitoraggio della regione utilizza una posizione significativa per alcune capacità, ho disassemblato il binario del framework e ho trovato elementi relativi alle chiamate in una posizione significativa, ma ancora, è inconcludente. –

0

Dovrei vedere dove hai impostato l'istanza locationManager. Ma come @Mark Adams sta cercando di eludere, è necessario impostare la classe corrente come delegato per locationManager in modo che sappia a quale classe inviare i messaggi. E 'semplice come:

locationManager.delegate = self;

1

La precisione è migliorato in iOS 5.

+0

Hai un'idea di cosa è stato risolto? Ho ancora problemi nell'Eugene Oregon (~ 150.000 persone) che mi porta a credere che si basi su torri cellulari e WiFi. Ovviamente sarebbe pazzesco se quello fosse il caso in cui renderebbe ** il monitoraggio della regione ** utile solo in aree urbane densamente popolate –

+0

Funziona in iOS 5 e 6 in base a torri cellulari e wifi. Funziona meglio in aree urbane densamente popolate . Gli unici posti in cui ho lamentele sulla mia app sono in zone molto desolate (un'isola, nel nord del Canada). –

1

La risposta è:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy 

è deprecato in ios 6.o. Usa invece la regione `- (void) startMonitoringForRegion: (CLRegion *).

Grazie, Abdul`

+0

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/startMonitoringForRegion:desiredAccuracy: – mcphersonjr

1

Beh è possibile monitorare più regioni e simulare posizione in Xcode (dal pannello sopra il debugger) per verificare se sta funzionando o meno. Ho provato e funziona abbastanza bene.