Я очень ново в теме, поэтому, пожалуйста, будьте любезны.Остановить поток в другом контроллере View
В контроллере входа в систему после аутентификации пользователя я запускаю поток, чтобы получить геолокацию пользователей каждые 30 секунд (только для этого требуется, когда пользователь входит в систему), а затем перейдите к главному контроллеру представления приложение, которое отображает основную информацию приложения.
Когда пользователь выходит из системы, я хочу отменить поток, созданный для сбора геолокации каждые 30 секунд.
Как это сделать?
Я подхожу к этому правильно? Если нет, примеры и объяснения кода нравятся
Большое спасибо !!!!
Логгин View Controller
...
- (IBAction)loginButton:(id)sender {
NSInteger success = 0;
//Check to see if the username or password texfields are empty or email field is in wrong format
if([self validFields]){
//Try to login user
success = [self loginUser];
}
//If successful, go to the MainView
if (success) {
//Start getting users Geolocation in a thread
[NSThread detachNewThreadSelector:@selector(startGeolocation:) toTarget:self withObject:nil];
//Go to Main view controller
[self performSegueWithIdentifier:@"loginSuccessSegue" sender:self];
}
else
{
//Reset password text field
self.passwordTextField.text = @"";
}
}
...
//Thread to get Geolocation every 30 seconds
-(void)startGeolocation:(id)param{
self.geoLocation = [[GeoLocation alloc] init];
while(1)
{
//****************START GEOLOCATION*******************************//
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.databaseLock lock];
NSLog(@"Geolocation:(%f,%f)", [self.geoLocation getLatitude], [self.geoLocation getLongitude]);
sleep(30);
[appDelegate.databaseLock unlock];
}
}
Главная View Controller
...
//When the Logout Button in MenuView is pressed this method will be called
- (void)logoutButton{
//Cancel the geolocation tread
//????????????????????????????
//Log the user out
[self logoutUser]
}
...
Попробуйте использовать очереди вместо потоков напрямую. Посмотрите на GCD и [Руководство по программированию параллелизма] (https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html) – Abizern
NSOperationQueue или NSTimer будут лучше, чем что во время сна комбо. –
И вы можете отменить очередь или таймер при выходе из системы. –