私が取り組んでいるアプリの一部には、ユーザーが非アクティブになった場合に現在のコンテンツの上に空白の画面を配置することが含まれます。そのため、x 秒後に空白のページ ビュー コントローラーが開かれます。
(ViewController.m 内から、ScreenBlank.m からの NSNotification の検出によってトリガーされます)
UIPageViewController *blankPage = [self.storyboard instantiateViewControllerWithIdentifier:@"BlankPageViewController"];
[self presentViewController:blankPage animated:YES completion:nil];
この空白の画面は、ユーザーが画面に触れると削除されます (したがって、ユーザーのアクティビティが確認されます)。
(ViewController.m の touchesBegan コールバック内から)
[self dismissViewControllerAnimated:YES completion:nil];
私が抱えている問題は、ユーザーがログアウトしたときなど、この画面の空白を他の場所で削除することをトリガーしたいということです。これは、プラグインされたカードリーダーからカードを取り外すことによって行われ、別のクラス (および ActionMgr.m 内からインスタンス化されたクラス) から呼び出されることを意味します。
問題のクラス (CardWatcher) は次のように作成されます。
CardWatcher *newInstance = [[CardWatcher alloc] init];
[newInstance StartCardChecker];
そして、その CardWatcher のインスタンスは、カードが取り外されたときに次のように通知を発行します。
[[NSNotificationCenter defaultCenter] postNotificationName:@"logout" object:nil];
この通知は ViewController でリッスンされ、トリガーされると、以前に画面を空白にするために使用されたものとまったく同じコードを実行します。
[self dismissViewControllerAnimated:YES completion:nil];
ロギングを使用して、通知が正常に受信されていることを確認し、dismissViewControllerAnimated コードを実行していますが、何らかの理由で、このコードは実際にはビュー コントローラーを閉じていません。
私が考えることができる唯一の理由は、それが(長期的には)クラスのインスタンス内でフォームと呼ばれているということですが、それでもNSNotificationを介して渡されているため、私の目にはそのソースは無関係であるはずですか?
どんな助けでも大歓迎です!