Я принимаю входной фильтр расстояния от пользователя. Для целей тестирования я беру его в 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");
}
}
ли поправьте меня, если я делаю это в неправильном направлении. Все предложения приветствуются. Спасибо.
Выбор точность ближайших 10 м и дистанционный фильтр 5 м противоречивы. Как вы имитируете движение в своем симуляторе? – Paulw11
@ Paulw11 Я тоже пробовал точность. но ничего не произошло. После запуска моего приложения я устанавливаю «Местоположение» в свободном режиме (пробовал все параметры) в опции отладки симулятора и перемещал мой mac на определенное расстояние. –
Перемещение вашего Mac не окажет никакого влияния на симулятор. – Paulw11