【问题标题】:Manually switching views in UIPageViewController causes exception在 UIPageViewController 中手动切换视图会导致异常
【发布时间】:2014-03-30 06:26:27
【问题描述】:

我有一个 UIPageViewController,它显示两个 UIViewController 并允许用户在两​​者之间滑动。我实现了一个按钮,允许用户在两​​者之间手动切换。执行代码如下:

[self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"PlayersViewController"]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:^(BOOL completion){}];

不幸的是,每次我按下按钮时,我都会收到一个异常提示:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[__NSPlaceholderArray initWithObjects:count:]: 尝试从 objects[0] 插入 nil 对象”

我从扩展 UIPageViewControllerDelegate 的自定义类中调用该方法。

任何帮助将不胜感激!

**编辑:

以下是我的自定义类的相关部分:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataSource = self;
    gvc = [[GamesViewController alloc] init];
    pvc = [[PlayersViewController alloc] init];
    [self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"GamesViewController"]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}

- (void) slidepage
{
    [self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"PlayersViewController"]] direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:^(BOOL completion){NSLog(@"hihi");}];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    if ([viewController isKindOfClass:[GamesViewController class]])
        return nil;

    return [self.storyboard instantiateViewControllerWithIdentifier:@"GamesViewController"];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    if ([viewController isKindOfClass:[PlayersViewController class]])
        return nil;

    return [self.storyboard instantiateViewControllerWithIdentifier:@"PlayersViewController"];
}

【问题讨论】:

  • 您至少可以发布您的自定义类的代码吗?
  • storyboard 属性是如何声明的?
  • 我的代码中没有明确声明。不是继承自 UIViewController 的属性吗?文档中的声明是@property(nonatomic, readonly, retain) UIStoryboard *storyboard
  • 是的,你是对的。文档说如果视图控制器不是从情节提要中加载的,则该属性为零。那么接下来的问题是,如何实例化这个视图控制器?
  • [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];

标签: ios objective-c


【解决方案1】:

好像

[self.storyboard instantiateViewControllerWithIdentifier:@"PlayersViewController"]

返回nil。这意味着self.storyboardnil 或者情节提要找不到给定标识符的视图控制器。

【讨论】:

  • 在调试并查看了我的类的属性后,我发现情节提要为 nil。你有什么建议可以解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 2010-11-17
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多