appDelegate に次の 2 つのメソッドを実装し、ストーリーボードの各 viewController に復元 ID を指定して、状態の保存と復元のメカニズムをアプリに実装しようとしています。直面している問題は、アプリを再度開いたときです。前の画面または復元された画面を表示できますが、ほんの一瞬だけで、メイン ストーリーボード ファイルのベース ビュー コントローラーに移動します。
- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
return YES;
}
- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
return YES;
}
その解決策を教えてください。または、ここで何かを間違えている場合は教えてください。お返事お待ちしております。前もって感謝します。
更新部分:
アプリのデリゲート NSString * const AppDelegateRootVCKey = @"AppDelegateRootVCKey"; で次のメソッドを使用しています。
- (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder {
[coder encodeObject:self.window.rootViewController forKey:AppDelegateRootVCKey];
}
- (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder {
// Grabs the preserved root view controller.
UIViewController * vc = [coder decodeObjectForKey:AppDelegateRootVCKey];
if (vc) {
UIWindow * window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = vc;
window.restorationIdentifier = NSStringFromClass([window class]);
// The green color is just to make it obvious if our view didn't load properly.
// It can be removed when you are finished debugging.
window.backgroundColor = [UIColor greenColor];
self.window = window;
}
}
また、私のアプリの初期化部分は willFinishLaunchingWithOptions にあり、私の didFinishLaunching は次のとおりです
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window becomeFirstResponder];
return YES;
}
ストーリーボードを介してすべてのコントローラーに復元識別子を与え、コードによって他の.xibにも与えました。したがって、上記の結果は、ストーリーボード画面にいるときはいつでも状態を保持しますが、ヘッダーの戻るボタンまたは他のボタンをクリックして左側/右側のメニュー画面を開くと、セレクターが認識されないという理由でクラッシュします。クラッシュした後、再度開くと、mainStoryboard から開始され、すべて正常に動作します。もう 1 つの問題は、xib 画面でテストするたびに、アプリの状態が保持されず、mainStoryboard からアプリを再起動することです。