これが私のアプリでこの問題を修正する方法です。それは一種のハッキーな解決策ではないかと思いますが、それは風変わりなバグです。
コンテキスト:私のアプリは日記(Remembaryと呼ばれます)であり、各ページは異なる日の日記エントリです。現在表示されている日記エントリオブジェクトや現在の日付など、さまざまなアプリレベルの値を追跡する「AppContext」というシングルトンクラスがあります。毎日のdataViewControllerは、それ自体の日記エントリも追跡します。
最も難しい部分は、アプリが間違ったページを表示していることを検出できるコンテキストを見つけることでした。これは[RootViewControllerviewDidLayoutSubviews]にあることがわかったので、そのメソッドに次を追加しました。
// get the currently displaying page
DataViewController *currentPage = self.pageViewController.viewControllers[0];
// check if we're showing the wrong page
if ([currentPage myEntry] != [AppContext getCurrentEntry]) {
// jump to the proper page (the delay is needed to ensure that the rotation has fully completed)
[self performSelector:@selector(forceJumpToDate:)
withObject:[AppContext getCurrentEntryDate]
afterDelay:0.5];
}
これがforceJumpToDate関数です。この関数は、基本的に現在の日付に基づいて新しいページを取得し、アニメーション化せずにそのページにジャンプするようにpageViewControllerに指示します。
- (void) forceJumpToDate:(NSDate *)targetDate {
DataViewController *targetPage = [self.modelController viewControllerForDate:targetDate
storyboard:self.storyboard];
NSArray *viewControllers = [NSArray arrayWithObject:targetPage];
[self.pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:NULL];
}
新しいページが強制的に配置されると、ユーザーは画面に一時的な一時的な中断に気付く場合がありますが、これは、間違ったページが表示される場合にのみ発生するため、改善されています。
これは私のアプリをiOS6にアップグレードする能力を深刻に妨げていたので、私はついにそれを理解できてうれしいです。