- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
仅当与实现CLLocationManagerDelegate的类对应的UIView处于活动状态时才起作用。
如果我更改了视图,它将不会触发didEnterRegion。有人可以帮帮我吗?
我的代码看起来像这样
- (void)enableRegionMonitoring {
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
CLLocationCoordinate2D myMonLocation = CLLocationCoordinate2DMake(10.766699790955, 76.650101525879);
CLRegion *myRegion = [[CLRegion alloc]
initCircularRegionWithCenter:myMonLocation
radius:100
identifier:@"MyLoc"];
//NSLog(@"reg=%@",myRegion);
// Start monitoring for our CLRegion using best accuracy
[locationManager startMonitoringForRegion:myRegion
desiredAccuracy:kCLLocationAccuracyBest];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Entered Region");
NSDate *nowx=[NSDate date];
UILocalNotification *localNotification=[[UILocalNotification alloc]init];
if (!localNotification)
return;
NSDictionary *data = [NSDictionary dictionaryWithObject:@"qw" forKey:@"mykey"];
[localNotification setUserInfo:data];
[localNotification setFireDate:nowx];
[localNotification setTimeZone:[NSTimeZone defaultTimeZone]];
NSMutableString *message=[[NSMutableString alloc]init];
message = @"Local Not Triggered By didEnterRegion";
[localNotification setAlertBody:[nowx description]];
[localNotification setAlertAction:@"Open App"];
[localNotification setHasAction:YES];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
答案 0 :(得分:1)
从查看代码我猜你正在使用ARC,根据您的控制器/视图层次结构,当您切换到不同的视图时,您的视图和控制器可能会被解除分配,当发生这种情况时,也会释放locationManager。
将整个CLLocationManager代码移动到AppDelegate,让AppDelegate成为CLLocationManager委托。您现在调用“enableRegionMonitoring”的地方,您可以在AppDelegate上调用它。即使ViewController不再可见,它也会保持活动状态。