1

我有一个基于位置的应用程序,尽管该区域是正确的,但该应用程序永远不会移动到didEnterRegiondidExitRegion

for (int x = 0; x <= [[[TaskStore sharedStore] allTasks]count]-1; x++)
{
    NSArray *tasks = [[TaskStore sharedStore] allTasks];
    Task *selectedTask = [tasks objectAtIndex:x];

    location.latitude  = selectedTask.locationCoord.coordinate.latitude;
    location.longitude = selectedTask.locationCoord.coordinate.longitude;
    NSString* desiriedLoc = [selectedTask locationName];


    CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter: location radius: 30.0 identifier: desiriedLoc];
    NSLog(@"Entered new Location in Region %@", region);

    [locManager startMonitoringForRegion:region];

}

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

    NSLog(@"didEnterRegion for %@",region.identifier);

    UIAlertView *alr=[[UIAlertView alloc] initWithTitle:@"Reminder didEnterRegion"
                                            message:region.identifier delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok",nil];

    [alr show];
}

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

    UIAlertView *alr=[[UIAlertView alloc] initWithTitle:@"Reminder didExitRegion" message:region.identifier delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok",nil];

    [alr show];
}

这是从我的位置打印出来的字符串:

输入坐标纬度的新位置:51.509980 经度:-0.133700

这是从该区域打印出来的字符串:

在区域中输入新位置(标识符伦敦)<+51.50998000,-0.13370000> 半径 30.00m

4

3 回答 3

0

如果您在目标区域内开始监控,则不会触发任何事件。因为它不是真正的“didEnterRegion”事件。

于 2014-01-16T05:46:31.070 回答
0

正如@verbumdei 评论的那样,获得-didEnterRegionand的唯一方法-didExitRegion是建立一个CLLocationManagerDelegate. 将您的视图设置为委托并添加这些方法,您应该会看到更新。

需要注意的一件事是,您使用的是 30M 半径,如果您想触发更新,您需要非常接近您的位置。这在模拟器中相当容易做到,但在实际使用中(在设备上),30M 精度有点困难。我会从 100M 开始,然后根据经验逐步下降。

于 2013-05-28T22:22:52.440 回答
0

你似乎没有设置

    region.notifyOnEntry = YES;
    region.notifyOnExit = YES;

如果不显式设置这些属性,则不会触发指定的事件。

于 2016-02-03T09:52:34.347 回答