Почему мое приложение iOS перезагружается с первого экрана после возврата в режим переднего плана?
Когда в моем приложении iOS, которое находится в подробном экране, и я нажимаю кнопку домой, что приведет к переходу в фоновый режим. После 7 минут бездействия я снова запускаю его, и он не начинается с того места, где я его оставил. Это начинается с первого экрана.
Я зашел в интернет и узнал о сохранности и реставрации государства. Я реализовал на одном экране, но это не похоже на работу. Это то, что я сделал в appDelegate.m
//appDelegate.m
-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
return YES;
}
-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
return YES;
}
Следующий код находится в appDelegate.m в методе willFinishLaunchingWithOptions. Я не использую раскадровку, так как это приложение очень старое. У него есть XIB. Так что это приложение всегда должно идти на экран входа в систему, где проверяется, сохранен ли accessToken, оно будет переходить на домашний экран с экрана входа в систему. Если он не сохранен, он останется на экране входа. Так что это обязательно для выполнения. Таким образом, есть только один способ закодировать это, как показано ниже.
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
...
loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc]initWithRootViewController:loginViewController];
self.navigationController.restorationIdentifier = @"NavigationController";
[loginViewController.view setBackgroundColor:[UIColor whiteColor]];
self.window.rootViewController = self.navigationController;
...
...
}
Я дал restoreId для всех контроллеров представления, как показано ниже в viewDidLoad(). Например, это то, что я сделал в PetDetailViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.restorationIdentifier = @"MatchedPetIdentification";
self.restorationClass = [self class];
}
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[super encodeRestorableStateWithCoder:coder];
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
[super decodeRestorableStateWithCoder:coder];
}
Теперь, когда я перехожу на экран PetDetail и нажимаю домашнюю кнопку, вызывается encodeRestorableStateWithCoder(). Остановка приложения из xcode, перезапуск его остается на том же экране, но сразу переходит на экран входа в систему и переходит на домашний экран (может выполняться код в willFinishLaunchingWithOptions)
Я делаю что-то не так? Как предотвратить перезапуск приложения с первого экрана, если пользователь не убил его вручную?
1 ответ
Вы не можете контролировать, когда ваше приложение переводится в приостановленное состояние из фонового состояния, ОС автоматически сделает это, чтобы выделить больше памяти для приложений переднего плана. Для получения дополнительной информации о переходах состояний и прекращении работы приложений вы можете обратиться к: