这是我设法在我的应用程序中解决此问题的方法。恐怕这是一种 hacky 解决方案,但它是一个古怪的错误。
上下文:我的应用程序是一本日记(称为 Remembary),每一页都是不同日期的日记条目。我有一个名为“AppContext”的单例类,它跟踪各种应用级别的值,例如当前显示的日记条目对象、当前日期等。每天的 dataViewController 也会跟踪它自己的日记条目。
最棘手的部分是找到一个上下文,我可以在其中发现应用程序显示了错误的页面。原来这是在 [RootViewController viewDidLayoutSubviews] 中,所以我在该方法中添加了以下内容:
// 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 的能力,所以我很高兴我终于弄明白了。