2013-08-29 2 views
1

Я новичок в программировании на iOS и пытаюсь получить свое текущее местоположение. Мое главное приложение делегат, как это,Проблема с местоположением iOS - не видно данных, поступающих в

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 

@class AWSViewController; 

@interface AWSAppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate> 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) AWSViewController *viewController; 
@property (strong, nonatomic) UINavigationController *navController; 
@property (strong, nonatomic) NSMutableArray *cities; 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

@end 

И в реализации, у меня есть эти 2 метода и я называю getCurrentLocation от (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Я могу видеть слова «Started, чтобы получить места» на консоли и Я больше ничего не вижу.

-(void)getCurrentLocation { 

    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; 
    locationManager.distanceFilter = 500; 
    [locationManager startUpdatingLocation]; 
    NSLog(@"Started to get locations"); 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 

    CLLocation *location = [locations lastObject]; 
    NSLog(@"Got Location"); 
    NSLog(@"latitude %+.6f, longitude %+.6f\n", location.coordinate.latitude, location.coordinate.longitude); 
} 

Что я здесь делаю неправильно? thanks

+3

Ваш дистанционный фильтр установлен на 500 м. Таким образом, он будет вызывать didUpdateLocations, только если вы переместите> 500 м. EDIT: Кроме того, вам лучше реализовать команду «- (void) didUpdateLocation: (CLLocation *) loc». – Kai

+0

Я установил его на 5 м, но все равно ничего :( –

ответ

1

Я исправил его: D

мой locationManager объект - я его экземпляр, но не сохранить, так что исчезает мгновенно в клубах дыма

@property (strong, nonatomic) CLLocationManager *locationManager; 

Затем

-(void)getCurrentLocation { 

    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; 
    self.locationManager.distanceFilter = 5; 
    [self.locationManager startUpdatingLocation]; 
    NSLog(@"Started to get locations"); 
} 

Сейчас он работает отлично: D

0

Включен ли ваш менеджер местоположений? Проверьте это:

if(locationManager.locationServicesEnabled == NO){ 
    //go to settings>location services 
} 

Если что-то будет плохо, метод

locationManager:didFailWithError: 

называется вместо

locationManager:didUpdateLocations 

так, пожалуйста, реализовать его:

- (void)locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error { 
    NSLog(@"error%@",error); 
} 
+0

Я его реализовал, но до конца ничего не доходит до консоли –

+0

Да, менеджер местоположений включен –

+0

wait .. вы сказали @ Kai, что вы установили distanceFilter на 5 метров, и вы говорите о NSLog, поэтому ваше устройство подключено на вашем Mac. Вы уверены, что вы двигаетесь на 5 метров (по горизонтали) на свой телефон? –

3

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

@interface AWSAppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate> 
{ 
    CLLocationManager *locationManager; 
} 



-(void)getCurrentLocation { 
    locationManager = [[CLLocationManager alloc] init]; 
    // etc 
}