无法为我的UIPageViewController的UIViewControllers添加功能

时间:2016-09-26 14:24:49

标签: ios swift uipageviewcontroller

我制作了一个UIPageViewController,它将管理3个UIViewControllers。

这一切似乎都运行得很好,直到我在故事板中添加一个按钮,然后用IBOutlet挂钩 - 然后我的应用程序崩溃了:

  

“libc ++ abi.dylib:以NSException类型的未捕获异常终止”

此外,如果我用IBAction挂上按钮,点击按钮时应用程序会崩溃。

class PostPageViewController: UIPageViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        print("IN PAGE VC!!")

        self.dataSource = self

        if let firstViewController = orderedViewControllers.first {
            print("IN FIRST!! \(firstViewController)")
            setViewControllers([firstViewController], direction: .Forward, animated: true, completion: nil)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    private(set) lazy var orderedViewControllers: [UIViewController] = {
        return [self.newViewController("1"), self.newViewController("2"), self.newViewController("3")]
    }()

    private func newViewController(number: String) -> UIViewController {
        return self.storyboard!.instantiateViewControllerWithIdentifier("NewPostVC\(number)")
    }
}

我也有一个控制页面的扩展程序,但在这种情况下,我认为这不是很有趣。

这是我的第一个视图控制器,这导致了问题:

class NewPostVC1: UIViewController {
    @IBOutlet weak var cancelButton: UIButton!

    @IBAction func cancelButtonTapped(sender: AnyObject) {

        print("Cancel button tapped!")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("NEWPOSTVC 111111")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

所以,正如所说的那样,当点击按钮时应用程序会崩溃 - 我想这是关于UIPageViewController无法弄清楚哪个UIViewController正在进行交互,但我无法找到任何确认这一点的东西。有没有人对这个问题有所了解?

UPDATE :我刚刚发现mu第一个viewController不是instanciated,但是数字2和3是..所以现在我的问题是我必须以某种方式加载我的viewcontroller,在它显示之前 - 或者只是在第一页上没有任何功能,并且只在第2和第3页上有任何功能。是否有人建议在显示之前实例化第一个viewcontroller?我已经尝试过storyboard.instantiateViewControllerWithIdentifier(“NewPostVC1”),但它不能完成这项工作!

1 个答案:

答案 0 :(得分:1)

这类错误通常意味着你在故事板上错误地勾起了一些东西。例如。你已经添加了一个IBAction,把它连接到按钮动作,但后来回到代码并更改了方法的名称(偶然或故意)。