我有一个基于位置的应用,虽然该区域是正确的,但该应用永远不会移至didEnterRegion
或didExitRegion
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米
答案 0 :(得分:0)
正如@verbumdei所评论的,获得-didEnterRegion
和-didExitRegion
的唯一方法是建立CLLocationManagerDelegate
。将您的视图设置为委托并添加这些方法,您应该看到更新。
有一点需要注意,您使用的是30M半径,如果您想要触发更新,则需要在您的位置非常接近。这在模拟器中相当容易,但在现实生活中(在设备上),30M精度有点难度。我会从100M开始,根据经验逐步降低。
答案 1 :(得分:0)
如果您在停留在目标区域时开始监控,则不会触发任何操作。 因为它不是真正的“didEnterRegion”事件。
答案 2 :(得分:0)
你似乎没有设置
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
如果不显式设置这些属性,则不会触发指定的事件。