最初のView Controllerからプッシュした単純なUIViewControllerを復元しようとしています。最初のものは保持されますが、2 番目のものは再起動すると消えます。ストーリーボードは使いません。すべてのView Controllerにプロトコルを実装し、それぞれにrestoreIdentifierとrestoreClassを追加します。
2 番目の viewController は 3 番目の viewController から継承し、xib ファイルから初期化されます。UIViewControllerRestoration を直接使用しないため、この 3 番目に実装する必要があるかどうかはわかりません。
私のコードは通常次のようになります。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.restorationIdentifier = @"EditNotificationViewController";
self.restorationClass = [self class];
}
return self;
}
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
}
+(UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder
{
EditNotificationViewController* envc = [[EditNotificationViewController alloc] initWithNibName:@"SearchFormViewController" bundle:nil];
return envc;
}
おそらく、navigationController もサブクラス化して、UIViewControllerRestoration から継承できるようにする必要がありますか?
更新: OK、UIViewController から UIViewController へのプッシュが機能するようです。しかし、UIViewController から UITableViewController へのプッシュ、およびその逆のプッシュは機能しません。テーブルビューが UIViewControllerRestoration プロトコルを実装している場合、アプリがクラッシュします。プロトコルを実装しないと、tableView からプッシュされた UIViewControllers は保持されません。
UITableViewControllers をクラッシュさせずに保持するには、どのように扱うべきですか?
更新: もうクラッシュしません..これは、アプリ固有のメモリ バグが原因でした。しかし、tableView はまだ保持されておらず、プッシュされた viewController も保持されていません。
更新:テーブルビューが正しく復元されなかった理由は、バックグラウンドでデータソースを削除したためです..しかし、モーダルviewControllerをself.navigationController以外の別のnavigationControllerにプッシュしようとすると、モーダルviewControllerが表示されないという問題がまだあります。このモーダル ナビゲーション コントローラーに復元識別子を設定しましたが、ビューが表示されません。