Objective c UIPageViewController反向滑动未显示最后一个ViewController。它再次加载

Objective c UIPageViewController反向滑动未显示最后一个ViewController。它再次加载,objective-c,xcode,ios7,uiviewcontroller,uipageviewcontroller,Objective C,Xcode,Ios7,Uiviewcontroller,Uipageviewcontroller,我在UIPageViewController上工作,对这个概念我是新手。我的要求是这样的, 我有四种布局称之为L1、L2、L3和L4。所有的布局设计都是在同一个视图控制器中完成的,称之为jlayutonevc我的功能就像杂志一样,所以在右/向前滑动时,我们会看到新文章,在左/向后滑动时,我会看到最后加载的文章 在进行向右/向前滑动时,我调用API,API将为我提供数据,根据这些数据我决定显示哪个布局 向右/向前滑动工作正常,数据显示完美,但向左/向后滑动不会显示上次加载的屏幕 我的代码 //

我在UIPageViewController上工作,对这个概念我是新手。我的要求是这样的,

我有四种布局称之为L1、L2、L3和L4。所有的布局设计都是在同一个视图控制器中完成的,称之为jlayutonevc我的功能就像杂志一样,所以在右/向前滑动时,我们会看到新文章,在左/向后滑动时,我会看到最后加载的文章

  • 在进行向右/向前滑动时,我调用API,API将为我提供数据,根据这些数据我决定显示哪个布局
  • 向右/向前滑动工作正常,数据显示完美,但向左/向后滑动不会显示上次加载的屏幕
我的代码

// load previous Article
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if ([self.cachedLayouts count] > 0) {
        JLayoutOneVC *prev = (JLayoutOneVC *)[self.cachedLayouts lastObject];
        //[prev setArticleDetailsRespDict:self.articleDetailsRespDict];
        pageCount -= 1;
        return prev;
    }

    JLayoutOneVC *prev = [self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
    [prev setArticleDetailsRespDict:self.articleDetailsRespDict];
    prev.articleDetailsRespDict = nil;
    [prev.articleDetailsTable reloadData];
    pageCount -= 1;
    return prev;
}

// load next Article
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    JLayoutOneVC *next = (JLayoutOneVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
    [next setArticleDetailsRespDict:self.articleDetailsRespDict];
    next.articleDetailsRespDict = nil;
    [next.articleDetailsTable reloadData];
    pageCount += 1;
    return next;
}

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
    if([pendingViewControllers count]>0)
    {
        // Doing this for testing purpose
        if (self.layout > 4) {
            self.layout = 1;
        } else {
            self.layout += 1;
        }
        [self performSelector:@selector(getArticleDetailsFromServer:) withObject:nil afterDelay:1.0f];
    }

}
作为参考,我正在添加图像

  • 这是我的第一篇文章。

  • 在我看到的右/向前滑动中

  • 这是第二篇文章。

  • 现在当我向后/向左滑动时,这就是我面临的问题。它不加载上一个ViewController,而是显示新数据。


希望你们能帮助我。提前谢谢。请在下面对我的问题提出任何疑问。

我不知道你为什么要检查

if ([self.cachedLayouts count] > 0) {
您的验证应基于页面计数:

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if (pageCount > 0) {
        pageCount -= 1;
        JLayoutOneVC *prev = [self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
        // I'm not sure how setArticleDetailsRespDict get the data, the best way would be get the data base on index, in this example pageCount
        [prev setArticleDetailsRespDict:self.articleDetailsRespDict];
        prev.articleDetailsRespDict = nil;
        [prev.articleDetailsTable reloadData];

        return prev;
    }
}
另一种方法
viewControllerAfterViewController:
也应检查pageCount值:

if (pageCount < MAXPAGECOUNT) {
if(pageCount

好的方法是添加到自定义视图控制器(JLayoutOneVC)属性,例如index,在这两种方法中,您都可以获得该值并增加/减少它(取决于方法)。之后,您可以根据该索引获取数据库并重新加载视图。

嘿,Greg,我已经做了您建议的更改,但仍然不走运。作为参考,您可以试用此应用程序。我需要浏览与此应用程序类似的文章。我相信问题在于您的数据,以及setArticleDetailsRespDict:method的工作方式。您可以每次登录数据吗更改页面并查看它是否返回正确的值。如果您可以显示该方法,这将有所帮助。此外,您还可以设置dict:setArticleDetailsRepdict,然后设置nil:prev.ArticleDetailsRepdict并重新加载数据。因此,我相信您可以使用nil dictionary重新加载数据。