单击按钮时,CLLocationmanager是否保持相同的纬度和经度?

时间:2011-04-27 12:08:10

标签: iphone geolocation cllocation

这是我在本网站的第一个问题。

我有这个严重的问题......我会从头开始解释......

在我的应用程序中,我需要在用户点击应用程序中的按钮时获取用户的当前位置..但问题是何时单击按钮它不更新到当前位置它获取以前的位置。但是当我在iphone应用程序中重置位置警告时,它会获得正确的位置。

以下是我为此应用程序执行的代码步骤,以获取用户的当前位置...

首先我导入应用程序......

然后我使用全局文件来保存应用程序的数据,因为我需要通过应用程序访问它们。

所以我在globle.m和.h文件中所做的是......

CLLocationManager* locationManager;

@synthesize locationManager


+ (Globals*)sharedGlobals {
    @synchronized(self) {
        if(_sharedGlobals == nil) {
            _sharedGlobals = [[super allocWithZone:NULL] init];


   _sharedGlobals.locationManager = [[CLLocationManager alloc]init];
   [_sharedGlobals.locationManager   setDesiredAccuracy:kCLLocationAccuracyBest];

        }
    }

    return _sharedGlobals;
}

然后在我的其他视图控制器中,我将CLLocationManagerDelegate放在.m文件中

-(IBAction) didTapSearchbtn{

    if (![CLLocationManager locationServicesEnabled]) {


    }else {

        [[Globals sharedGlobals].geoLocations removeAllObjects];
        search.text = nil;
        [Globals sharedGlobals].fromTextField = NO;

        [[Globals sharedGlobals].locationManager setDelegate:self];
        [[Globals sharedGlobals].locationManager startUpdatingLocation];


    }


}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if (newLocation.horizontalAccuracy < 0) return; 

    [[Globals sharedGlobals].locationManager setDelegate:nil];
    [[Globals sharedGlobals].locationManager stopUpdatingLocation];

    [[Globals sharedGlobals].geoLocations setObject:[[NSString alloc] initWithFormat:@"%f", newLocation.coordinate.latitude] forKey:@"geolat"];
    [[Globals sharedGlobals].geoLocations setObject:[[NSString alloc] initWithFormat:@"%f", newLocation.coordinate.longitude] forKey:@"geolong"];

    [self retriveDataFromInternet];

    [[Globals sharedGlobals].locationManager release];

}


- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    //GPS error

    [[Globals sharedGlobals].locationManager setDelegate:nil];
    [[Globals sharedGlobals].locationManager stopUpdatingLocation];


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"YumTable!", nil) message:NSLocalizedString(@"Enable Your GPS settings to get your current location", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil];
    [alert show];
    [alert release];

    [[Globals sharedGlobals].locationManager release];
}

我把标签放到我的视图控制器上,然后去不同的地方拍摄纬度和经度......但是它总是得到相同的纬度和经度...但是当我重置位置警告并再次运行应用程序时它采取了正确的纬度和经度...所以,如果我需要采取当前位置总是我必须重置它。但我需要的是每次点击搜索按钮时获取当前位置......

任何人都可以说这段代码有什么不对,任何人都可以帮助我......

同样非常抱歉我的英语不好......:)

2 个答案:

答案 0 :(得分:1)

LocationManager将返回previos位置,因为它尝试尽可能快,并且认为此位置可能足够好。我通常检查新位置的时间戳,以确保它是新的。如果它是旧的我不会停止经理并等待下一个经理。

我建议您查看Apple提供的示例代码https://developer.apple.com/library/ios/#samplecode/LocateMe/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007801

此代码是从示例中复制的:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    // test the age of the location measurement to determine if the measurement is cached
    // in most cases you will not want to rely on cached measurements
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;
}

答案 1 :(得分:0)

我错过了键入我的代码......在我确定我的应用程序开始完美运行之后...谢谢你们的帮助..

[_ sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

而不是我用过的

[_ sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBestforNavigation];