将UITableView添加到UIPageViewController时,“无法识别的选择器发送到实例”

时间:2017-07-14 05:14:45

标签: ios objective-c uitableview uipageviewcontroller

我正在尝试创建一个内部有多个水平分页UITableViews的PageViewController。 UITableViews存储在一个数组中;我使用UIPageViewController setViewControllers方法将数组中的第一个对象添加到PageVC:

 [self.pageViewController setViewControllers:[self.tableViews objectAtIndex:0] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

然后我使用viewControllerBeforeViewControllerviewControllerAfterViewController方法将剩余的UITableViews添加到PageViewController。

setViewControllers方法产生以下错误:

 -[UITableView count]: unrecognized selector sent to instance 0x7c347e00
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView count]: unrecognized selector sent to instance 0x7c347e00'

为什么会发生这种错误?

2 个答案:

答案 0 :(得分:3)

您应首先查看使用here的方法:

- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers 
                 direction:(UIPageViewControllerNavigationDirection)direction 
                  animated:(BOOL)animated 
                completion:(void (^)(BOOL finished))completion;

它说参数应该是viewControllers

  

<强>参数:

     

viewControllers视图控制器或视图控制器   显示。

因此,您必须选择UIViewcontrollerUITableViewController

答案 1 :(得分:1)

两个问题。

您需要将视图控制器而不是视图传递给页面视图控制器。对于每个UITableView,您需要一个UITableViewController。

如果您将变量self.tableViews更改为self.tableViewControllers(使用您为每个UITableView创建的UITableViewController),那么就在那里。

另一个问题是setViewControllers的第一个参数应该是NSArray。 (NSArray有一个名为count的选择器。)

更改代码以在添加时将第一个表视图包装在数组中:

[self.pageViewController setViewControllers:@[ [self.tableViewControllers objectAtIndex:0] ] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]