2013-10-10 14 views
6

Sto utilizzando il seguente codice per monitorare le regioni nella mia app iOS. Funziona perfettamente quando costruisco l'app su iOS6. Quando lo compilo su iOS7, didEnterRegion non viene attivato.iOS 7 didEnterRegion non viene richiamato affatto

// creare e registrare una regione con iOS

CLLocationCoordinate2D venueCenter = CLLocationCoordinate2DMake([favoriteVenue.venueLat  doubleValue], [favoriteVenue.venueLng doubleValue]); 
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:venueCenter radius:REGION_RADIUS identifier:favoriteVenue.venueId]; 

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
[appDelegate.locationManager startMonitoringForRegion:[self regionForVenue:favoriteVenue]]; 

// Nel AppDelegate.m

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    NSLog(@"Entered region: %@", region.identifier); 
} 

ho anche impostare le modalità di fondo richiesto come "registra App per aggiornamenti di posizione" nei miei file plist.

Qualche idea di cosa manca per questa funzione su iOS7?

Grazie!

risposta

0

Qualcosa che dovrebbe funzionare sia per iOS 6 che per 7 è quello di creare un metodo pubblico all'interno della classe conforme al protocollo CLLocationManagerDelegate che si dice di iniziare a monitorare la regione. Per esempio:

//LocationManagerClass.h 

@interface LocationManagerClass : NSObject 

     {... other stuff in the interface file} 

- (void)beginMonitoringRegion:(CLRegion *)region; 

@end 

e poi in

//LocationManagerClass.m 

@interface LocationManagerClass() <CLLocationManagerDelegate> 
@end 

@implementation LocationManagerClass 

    {... other important stuff like locationManager:didEnterRegion:} 

- (void)beginMonitoringRegion:(CLRegion *)region 
{ 
    [[CLLocationManager sharedManager] startMonitoringForRegion:region]; 
} 

@end 

Quindi nel tuo caso si sarebbe chiamata [appDelegate beginMonitoringRegion:region];

Una nota a parte, mi sento di raccomandare non mettere il vostro codice di gestione posizione nel delegato app . Sebbene tecnicamente funzioni, in genere non è un buon modello di progettazione. Invece, come nell'esempio sopra, proverei a inserirlo nella propria classe location manager che probabilmente sarà un singleton. Questo post sul blog fornisce un buon supporto sul perché non mettere un sacco di cose nel delegato dell'app: http://www.hollance.com/2012/02/dont-abuse-the-app-delegate/

Problemi correlati