我在iOS和gefencing上遇到了一些问题…
//
// ViewController.m
//
//
// Created by me on 14.05.13.
// Copyright (c) 2013 me. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<CLLocationManagerDelegate>
{
CLLocationManager *locationManager;
CLRegion *testRegion;
}
#define METERS_PER_MILE 1609.344
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self initlocationManager];
// [self startlocationManager];
}
// init location Manager Object, set delegation, result and accurate
- (void)initlocationManager {
//create location manager object
locationManager = [[CLLocationManager alloc]init];
//this instance send its messages to our AppDelegate
[locationManager setDelegate:self];
//to get all results from the location manager
[locationManager setDistanceFilter:kCLDistanceFilterNone];
//be accurate as possible
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
}
- (void)viewWillAppear:(BOOL)animated {
CLLocationCoordinate2D startLocation;
startLocation.latitude = +52.53753000;
startLocation.longitude= +13.35971000;
MKPointAnnotation *newLocation = [[MKPointAnnotation alloc] init];
newLocation.coordinate = startLocation;
newLocation.title = @"great title";
newLocation.subtitle = @"great subtitle";
MKCoordinateRegion startingRegion = MKCoordinateRegionMakeWithDistance(startLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);
testRegion = [[CLRegion alloc] initCircularRegionWithCenter:startLocation radius:500 identifier:@"TEST"];
[_mapView addAnnotation:newLocation];
[_mapView setRegion:startingRegion animated:YES];
[locationManager startMonitoringForRegion:testRegion];
NSLog(@"%@",locationManager.monitoredRegions);
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"Error : %@",error);
}
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
NSLog(@"Region monitoring failed with error: %@", [error localizedDescription]);
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Entered Region - %@", region.identifier);
// [self showRegionAlert:@"Entering Region" forRegion:testRegion.identifier];
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"Started monitoring %@ region", region.identifier);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
终端给我以下消息:
2013-05-15 00:24:47.739 [8712:13d03] {(
(identifier TEST) <+52.53753000,+13.35972000> radius 500.00m
)}
2013-05-15 00:24:47.972 [8712:13d03] Started monitoring TEST region
因此,区域已成功创建,监视也开始了但是didEnterRegion
函数从未被调用过。
帮忙太好了!
编辑:此刻我在iPhone模拟器中使用GPX文件,它工作得很好。只有didEnterRegion
永远不会被调用。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx version="1.1" creator="http://www.geoplaner.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<wpt lat="52.53856" lon="13.3515">
<ele>36.6</ele>
<name>WP04-D</name>
</wpt>
<wpt lat="52.53753" lon="13.35972">
<ele>35.1</ele>
<name>WP05-E</name>
</wpt>
<wpt lat="52.538" lon="13.35788">
<ele>34.1</ele>
<name>WP06-F</name>
</wpt>
<wpt lat="52.53844" lon="13.35633">
<ele>33.6</ele>
<name>WP07-G</name>
</wpt>
<wpt lat="52.53895" lon="13.35392">
<ele>34.7</ele>
<name>WP08-H</name>
</wpt>
<wpt lat="52.53813" lon="13.34925">
<ele>36</ele>
<name>WP09-I</name>
</wpt>
<wpt lat="52.53794" lon="13.34667">
<ele>36.3</ele>
<name>WP10-J</name>
</wpt>
<wpt lat="52.53815" lon="13.34504">
<ele>37.1</ele>
<name>WP11-K</name>
</wpt>
<wpt lat="52.5369" lon="13.35938">
<ele>39.3</ele>
<name>WP12-L</name>
</wpt>
<wpt lat="52.53619" lon="13.35792">
<ele>33.3</ele>
<name>WP13-M</name>
</wpt>
<wpt lat="52.53468" lon="13.35508">
<ele>37.3</ele>
<name>WP14-N</name>
</wpt>
<wpt lat="52.53398" lon="13.35367">
<ele>37</ele>
<name>WP15-O</name>
</wpt>
<wpt lat="52.53781" lon="13.35862">
<ele>33.7</ele>
<name>WP16-P</name>
</wpt>
</gpx>
您的代码看起来很好。只要确保locationManager被保留/强持有。
使用iPhone模拟器测试您的区域代码。在"调试"菜单中,从"位置"子菜单中选择一个位置。改变不同的位置会对你的代码产生影响。
我刚刚测试了你的代码使用iPhone模拟器,并从子菜单中选择位置。我为"自定义位置"输入了您的代码的后期/长号。输出如下:
2013-05-15 07:42:50.885 Location[69277:c07] {(
(identifier home) <+37.26917400,-119.30660700> radius 100.00m
)}
2013-05-15 07:42:50.932 Location[69277:c07] Started monitoring TEST region
2013-05-15 07:44:01.103 Location[69277:c07] Entered Region - TEST
2013-05-15 07:44:59.573 Location[69277:c07] Entered Region - TEST
当我选择"自定义位置"时,出现"输入区域"输出。我从代码中所做的唯一更改是:1)注释掉'mapView'行,2)声明ViewController接口,如下所示。您使用了类扩展。
@interface ViewController : UIViewController
<CLLocationManagerDelegate>
{
CLLocationManager *locationManager;
CLRegion *testRegion;
}
@end
确保您的应用程序启用了位置服务。
请确保您设置了委托。您可以通过使用gpx文件来模拟移动。包括新建文件->资源->GPX文件。然后像下面这样编辑文件:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="LAT1" lon="LONG1">
<name>Location</name>
</wpt>
<wpt lat="LAT2" lon="LONG2">
<name>Location</name>
</wpt>
<wpt lat="LAT3" lon="LONG3">
<name>Location</name>
</wpt>
<wpt lat="LAT4" lon="LONG4">
<name>Location</name>
</wpt>
<wpt lat="LAT5" lon="LONG5">
<name>Location</name>
</wpt>
<wpt lat="LAT6" lon="LONG6">
<name>Location</name>
</wpt>
<wpt lat="LAT7" lon="LONG7">
<name>Location</name>
</wpt>
<wpt lat="LAT8" lon="LONG8">
<name>Location</name>
</wpt>
<wpt lat="LAT9" lon="LONG9">
<name>Cupertino</name>
</wpt>
<wpt lat="LAT10" lon="LONG10">
<name>Location</name>
</wpt>
<wpt lat="LAT11" lon="LONG11">
<name>Location</name>
</wpt>
</gpx>
尝试包含区域内部和外部的坐标
现在你可以在iphone模拟器中添加这个文件Debug->location->Custom location