2

我正在开发聊天应用程序。我想存储所有视图控制器的应用程序状态。

我存储应用程序状态的代码:

+ (UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder
 {
 MoreController *vc = nil;
 UIStoryboard *storyboard = [coder decodeObjectForKey:UIStateRestorationViewControllerStoryboardKey];
 if (storyboard)
 {
      vc = (MoreController *)[storyboard instantiateViewControllerWithIdentifier:@"MoreController"];
      vc.restorationIdentifier = [identifierComponents lastObject];
      vc.restorationClass = [MoreController class];
 }
 return vc;
}

 - (void)encodeRestorableStateWithCoder:(NSCoder *)coder
 {
       [coder encodeObject:self.view forKey:@"save"];
       [coder encodeObject:_btnoiwii forKey:@"save"];

      [coder encodeObject:_tblMore forKey:kUnsavedEditStateKey];
           [super encodeRestorableStateWithCoder:coder];
 }

 - (void)decodeRestorableStateWithCoder:(NSCoder *)coder
  {
   self.view = [coder decodeObjectForKey:@"save"];
  _btnoiwii= [coder decodeObjectForKey:@"save"];

  _tblMore = [coder decodeObjectForKey:kUnsavedEditStateKey];
  [super decodeRestorableStateWithCoder:coder];

  }

我能够编码应用程序的状态,但不能解码。在我添加的应用委托类中 shouldRestoreApplicationState,willEncodeRestorableStateWithCoder

请给我适当的解决方案来保存和恢复 iOS 中的应用程序状态。

4

1 回答 1

0

您不应该像那样保存整个表格视图和视图控制器的超级视图。当 UIKit 恢复你的视图控制器时,它会自动为你恢复所有的视图。确保保存数据源并在解码时重新加载表格视图。

如果你想恢复你的 tableView 的索引,你需要遵守这个协议UIDataSourceModelAssociation并实现这些方法:indexPathForElementWithModelIdentifiermodelIdentifierForElementAtIndexPath

还要确保您正在恢复推送视图控制器的导航堆栈。

于 2017-01-06T18:10:23.910 回答