Когда в приложении My 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)
Я делаю что-то не так? Как предотвратить перезапуск приложения с первого экрана, если пользователь не убьет его вручную?