2013-05-14 37 views
1

我有一些问题与iOS和gefencing ...的iOS didEnterRegion从来没有所谓

// 
// 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> 
+0

你现在在那个地方吗? – GoZoner

+0

我使用simultator和gpx文件。我编辑我的第一篇文章。所以你可以用gps coords看到我的gpx文件。 – Hendrik

+0

是否调用了其他CLLocationManagerDelegate方法? – GoZoner

回答

5

你的代码看起来不错。只需确保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 

确保位置服务为您的应用程序启用。

+0

你是对的。它工作,如果我改变该地区。所以问题一定是gpx文件而不是代码。我创建一个新的,并希望它会在那之后工作.. – Hendrik

+0

加票(当你可以)和复选标记? – GoZoner

+1

+1,这是一些如何帮助我理解的东西,谢谢 – mAc

0

确保您设置了委托。 你可以通过使用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模拟器这个文件调试 - >位置 - >自定义位置

+0

我在我的gpx文件到我的第一篇文章。 – Hendrik

相关问题