1

Je cherche à créer un PageViewController très similaire à celui de SnapChat, par lequel vous pouvez glisser à partir du UIImagePickerController à un autre VC. Pour ce faire, j'ai mon VC initial qui affiche le imagepickercontroller, et un second VC (une légende VC) que je veux venir après ce VC initial. Pour encapsuler mon PageViewController, j'ai créé une autre classe de VC (montrée ci-dessous) que j'ai maintenant définie comme mon VC initial, et j'essaye de manipuler la source de données de PageVC. Pour une raison quelconque, il ne fonctionne pas et l'erreur «erreur fatale: trouvé de manière inattendue lors du déballage d'une valeur facultative» se produit. Est-ce parce que vous ne pouvez pas contenir un imagePickerController dans un PageVC (douteux comme SnapChat). J'ai créé un modèle plus simple qui contenait parfaitement deux VCs simples - pourquoi je ne peux pas le faire ici? L'autre que j'ai fait, j'ai contenu tout le code ci-dessous dans le VC initial que le projet commence avec, alors qu'ici j'ai créé un VC additionnel et l'ai changé manuellement pour le rendre le «contrôleur de vue initial».Pourquoi ai-je cette erreur après l'exécution de mon PageViewController?

NB. le projet compile bien sans la pageVC, donc cela n'a rien à voir avec un mauvais code dans les autres VCs.

Je suis très coincé et j'apprécierais énormément de l'aide pour ce problème épineux. Merci!

class PageViewController: UIViewController, UIPageViewControllerDataSource { 

private var pageViewController: UIPageViewController? 

private let VCarray = [ViewController(), CaptionViewController()] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    createPageViewController() 

} 

private func createPageViewController() { 

    let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController 
    pageController.dataSource = self 

    if VCarray.count > 0 { 
     pageController.setViewControllers([ViewController()], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
    } 

    pageViewController = pageController 
    addChildViewController(pageViewController!) 
    self.view.addSubview(pageViewController!.view) 
    pageViewController!.didMoveToParentViewController(self) 

} 

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 

    if viewController.isKindOfClass(CaptionViewController) { 

     let pvc = self.storyboard?.instantiateViewControllerWithIdentifier("CameraVC") 
     return pvc 

    } 

    return nil 

} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 

    if viewController.isKindOfClass(ViewController) { 

     let pvc = self.storyboard?.instantiateViewControllerWithIdentifier("CaptionVC") 
     return pvc 

    } 

    return nil 

} 
+0

Quel est le message d'erreur que vous recevez? – Nick

+0

gênant c'est ceci: erreur fatale: trouvé de manière inattendue nil tout en déballant une valeur facultative –

+0

Cela ressemble à une erreur d'exécution, pas une erreur de compilation. –

Répondre

0

Le seul déballage facultatif que je vois est sur la première ligne. Est-ce là où l'exception est lancée? Etes-vous sûr que votre contrôleur principal a un storyboard associé? Si oui, êtes-vous sûr que le storyboard contient un contrôleur nommé "PageController"?

+0

FYI, je viens de faire un test rapide et j'ai pu mettre un 'UIImagePickerController' dans un' UIPageViewController'. –

+0

C'est bon à savoir! L'erreur qui apparaît dans mon fil est: libswiftCore.dylibfonction spécialisation de la signature de Swift. _fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) Je ne sais pas ce que cela signifie pour vous. –

+0

Il y a un storyboard qui contient un contrôleur nommé "PageController". Comment puis-je vérifier que le contrôleur principal est câblé avec le storyboard? Je présume que c'est parce que le code fonctionnait bien avant que j'essaie d'ajouter le Pageviewcontroller. –