Интеграция GPS в мое приложение - PullRequest
1 голос
/ 15 января 2012

Я следую инструкции , чтобы интегрировать GPS в мое приложение.Я хочу отобразить значения Latitude и Longitude в методе viewDidLoad.Согласно учебному пособию они показали это другим способом.Но мне нужно, чтобы оно отображалось в viewDidLoad.Как я могу изменить следующий код, чтобы отобразить его в viewDidLoad?

HelloThereController.h контроллер просмотра

#import "MyCLController.h"

@interface HelloThereViewController : UIViewController <MyCLControllerDelegate> {
    MyCLController *locationController;
}

- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;

@end

HelloThereController.m контроллер просмотра

#import "HelloThereViewController.h"

@implementation HelloThereViewController

- (void)viewDidLoad {
    locationController = [[MyCLController alloc] init];
    locationController.delegate = self;
    [locationController.locationManager startUpdatingLocation];

    //I need to print the latitude and logitude values here..
}

Мой MyCLController.h класс

@protocol MyCLControllerDelegate 
@required
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end

@interface MyCLController : NSObject  {
    CLLocationManager *locationManager;
    id delegate;
}

@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign) id  delegate;

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

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error;

@end 

Мой MyCLController.m класс

#import "MyCLController.h"

@implementation MyCLController

@synthesize locationManager;
@synthesize delegate;

- (id) init {
    self = [super init];
    if (self != nil) {
        self.locationManager = [[[CLLocationManager alloc] init] autorelease];
        self.locationManager.delegate = self; 
    }
    return self;
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
         fromLocation:(CLLocation *)oldLocation
{
    [self.delegate locationUpdate:newLocation];
}

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{
    [self.delegate locationError:error];
}

- (void)dealloc {
    [self.locationManager release];
    [super dealloc];
}

@end

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Если этот контроллер представления загружается, как только загружается приложение, вы не можете. менеджеру местоположения требуется время, чтобы получить обновления gps.

вам потребуется отобразить некоторый компонент пользовательского интерфейса, который позволяет пользователю знать, что вы получаете местоположение, например UIActivityIndicatorView, и настроить другой метод для отображения координат при их получении.

0 голосов
/ 24 сентября 2013

В целом вы можете ускорить процесс, жертвуя некоторой точностью, задав желаемое свойство Accuracy.В соответствии с документацией значения:

kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers

В любом случае вас интересует первое местоположение, но все же согласно документации:

При запросе высокоточных данных местоположения,исходное событие, доставленное службой определения местоположения, может не соответствовать запрашиваемой вами точности. Служба определения местоположения доставляет начальное событие как можно быстрее. Затем она продолжает определять местоположение с запрошенной вами точностью и, при необходимости, доставляет дополнительные события, когда эти данные доступны.

Вы можете попробовать запустить диспетчер местоположений в AppDelegate didFinishLaunchingWithOptions, чтобы иметь еще некоторое время до появления представления.По словам Фредерика Ченга, locationManager.location может быть нулевым, поэтому лучше выполнять операции в делегате менеджера местоположений.

...