startMonitoringForRegion没有发送到didEnterRegion或didExitRegion

时间:2013-05-03 06:12:02

标签: ios ios6 core-location cllocation clregion

我有一个基于位置的应用,虽然该区域是正确的,但该应用永远不会移至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

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

在区域中输入新位置(标识符伦敦)&lt; + 51.50998000,-0.13370000&gt;半径30.00米

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你似乎没有设置

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
        <StackPanel />
        </ItemsPanelTemplate>
   </ListBox.ItemsPanel>
</ListBox>

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