2016-05-31 2 views
1

Я принимаю входной фильтр расстояния от пользователя. Для целей тестирования я беру его в 5 м. Но я не получаю обновлений местоположения после ходьбы 5 м. Я тестирую его на симуляторе iPhone 5s.Получение обновления местоположения после определенного расстояния (5 м в моем случае)

MainScreenController.m

@interface MainScreenController() 

@property (strong, nonatomic) IBOutlet UITextField *txtTakeDistance; 
-(void)writeToTextFile : (NSArray<CLLocation *> *) location; 
-(void)ShowContentlist; 
@end 

@implementation MainScreenController 
{ 
    //CLLocation *location; 
    CLLocationManager *locationManager; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    locationManager = [[CLLocationManager alloc]init]; 


} 
- (IBAction)btnSetDistance:(id)sender { 

    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; // Tried every accuracy option 
    locationManager.pausesLocationUpdatesAutomatically = NO; 
    locationManager.distanceFilter = [_txtTakeDistance.text doubleValue]; 

    if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
     [locationManager requestWhenInUseAuthorization]; 
    } 
    [locationManager startUpdatingLocation]; 


} 



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

NSLog(@"didFailWithError: %@", error); 
UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"Error" message:@"Failed to fecth current location" preferredStyle:UIAlertControllerStyleAlert]; 
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { 

}]; 
[controller addAction:okAction]; 
[self presentViewController:controller animated:YES completion:nil]; 
} 


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

CLLocation *currentLoaction; 
currentLoaction = [locations lastObject]; 

    if(locations != nil){ 

    NSLog(@"--> : %@",locations); 

    [self writeToTextFile:locations]; 
} 
    [locationManager stopUpdatingLocation]; 

} 

-(void)writeToTextFile : (NSArray<CLLocation *> *) location{ 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    CLLocation *currentLocation; 
    currentLocation = [location lastObject]; 
    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init]; 
    [timeFormat setDateFormat:@"yyyy-MM-DD HH:mm:ss"]; 

    NSString *timeStamp = [timeFormat stringFromDate:currentLocation.timestamp]; 
    NSString *content = [NSString stringWithFormat:@"\n%f|%f|%@\n",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude,timeStamp]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDir = [paths objectAtIndex:0]; 

    if ([fileManager fileExistsAtPath:documentDir]==YES) { 

     NSString *documentFile = [documentDir stringByAppendingPathComponent:@"log.txt"]; 
     NSString *textFromFile = [NSString stringWithContentsOfFile:documentFile encoding:NSUTF8StringEncoding error:nil]; 
     NSString *textToFile = [textFromFile stringByAppendingString:content]; 
     [textToFile writeToFile:documentFile atomically:YES encoding:NSUTF8StringEncoding error:nil]; 

    }else{ 

     NSLog(@"No such file"); 
    } 
} 

ли поправьте меня, если я делаю это в неправильном направлении. Все предложения приветствуются. Спасибо.

+0

Выбор точность ближайших 10 м и дистанционный фильтр 5 м противоречивы. Как вы имитируете движение в своем симуляторе? – Paulw11

+0

@ Paulw11 Я тоже пробовал точность. но ничего не произошло. После запуска моего приложения я устанавливаю «Местоположение» в свободном режиме (пробовал все параметры) в опции отладки симулятора и перемещал мой mac на определенное расстояние. –

+1

Перемещение вашего Mac не окажет никакого влияния на симулятор. – Paulw11

ответ

0

сделать некоторые изменения в коде, как:

- (IBAction)btnSetDistance:(id)sender { 

locationManager.delegate = self; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.pausesLocationUpdatesAutomatically = NO; 

locationManager.distanceFilter =5; 

if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [locationManager requestWhenInUseAuthorization]; 
} 
[locationManager startUpdatingLocation]; 
} 

и самое главное, вы не можете проверить, сколько расстояние вы переместили, перемещая макинтош.

вы должны проверить его на своем устройстве.

+0

, если вы просто меняете точность, я должен сказать вам, что я пробовал все варианты, включая ваши. –

+0

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

+0

Хорошо спасибо. Я пойду за устройством, если мне нечего работать на симуляторе. –

0

Попробуйте этот код

- (IBAction)btnSetDistance:(id)sender 
{ 
    locationManager=[[CLLocationManager alloc] init]; 
    locationManager.delegate=self; 
    if (([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) 
    { 
     [locationManager requestWhenInUseAuthorization]; 
    } 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = 5; // change it according to need 
    [locationManager startUpdatingLocation]; 

} 

с этой линией locationManager.distanceFilter = 5; каждые 5 метр расстояния, если вы покрываете карта обновит

Чтобы получить обновленный Широта и Долгота использовать этот код

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    CLLocation* location = [locations lastObject]; 
    NSDate* eventDate = location.timestamp; 
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 

    double lat = location.coordinate.latitude; 
    double longi = location.coordinate.longitude; 

    if (abs(howRecent) < 15.0) 

    { 
     NSLog(@"%f,%f",lat,longi); 
     [locationManager stopUpdatingLocation]; 
    } 
} 
+0

Это не работает для меня. –

 Смежные вопросы

  • Нет связанных вопросов^_^