1

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

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

在我的应用程序中,当用户单击应用程序中的按钮时,我需要获取用户的当前位置。但问题是当单击按钮时,它不会更新到当前位置,而是获取上一个位置。但是当我在 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];
}

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

任何人都可以说出这段代码有什么问题吗,任何人都可以帮助我....

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

4

2 回答 2

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;
}
于 2011-04-27T14:55:22.483 回答
0

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

[_sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

而不是我使用的

[_sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBestforNavigation];

于 2011-05-23T09:31:19.417 回答