核心位置didEnterRegion不起作用

时间:2012-10-16 04:42:46

标签: iphone ios core-location

- (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];
}

1 个答案:

答案 0 :(得分:1)

从查看代码我猜你正在使用ARC,根据您的控制器/视图层次结构,当您切换到不同的视图时,您的视图和控制器可能会被解除分配,当发生这种情况时,也会释放locationManager。

将整个CLLocationManager代码移动到AppDelegate,让AppDelegate成为CLLocationManager委托。您现在调用“enableRegionMonitoring”的地方,您可以在AppDelegate上调用它。即使ViewController不再可见,它也会保持活动状态。