2016-07-18 11 views
0

Ich weiß, dass der Fehler bedeutet, dass ich einen NULL-Zeiger habe, aber ich bin mir nicht sicher, WARUM das ist, und ich nehme an, dass es etwas sein muss, das ich in meinem Code falsch gemacht habe. Mein Index beginnt bei 1, weil ich möchte, dass er im Middle View-Controller startet, der die Startseite ist. Ich versuche, einen Seitenaufruf-Controller zwischen Ansichtencontrollern zu schalten, die dem Snapchat ähneln. Ich habe den folgenden Code:UIPageViewController schlechter Zugriffsfehler

import UIKit 

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 

    var viewControllersArray = [UIViewController]() 
    var pageIndex: Int? 
    let selectedIndex = 1 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.backgroundColor = UIColor.clearColor() 

    let vc1 = storyboard?.instantiateViewControllerWithIdentifier("ProfileView") as! ProfileViewController 
    let vc2 = storyboard?.instantiateViewControllerWithIdentifier("HomeView") as! HomeViewController 
    let vc3 = storyboard?.instantiateViewControllerWithIdentifier("MatchesView") as! MatchViewController 

    viewControllersArray.append(vc1) 
    viewControllersArray.append(vc2) 
    viewControllersArray.append(vc3) 

    self.dataSource = self 

    let pageContentViewController = self.viewControllerAtIndex(selectedIndex) 
    self.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) //Error here 

    } 

die Fehler an dieser Linie auftreten:

self.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) //Error here 

Der Fehler ist wie folgt: „Thread 1: EXC_BAD_ACCESS (Code = 2, Adresse = 0x7fff58d57ff8)

Hier ist meine viewControllerAtIndex Funktion:

func viewControllerAtIndex(index : Int) -> UIViewController? { 
    if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) { 
    return nil 
    } 

    let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! PageViewController 
    pageContentViewController.pageIndex = index 


    return pageContentViewController 
} 

Hier mein Storyboard mit dem Blick Controlle ist rs Swipe zwischen:

enter image description here

Jedwedes Hilfe sehr geschätzt wird!

+0

Wo ist Ihr View-Controller bei der Index-Funktion und warum beginnt der Index bei 1 und nicht bei 0? – WMios

+0

@WMios Ich habe gerade die Änderungen hinzugefügt – evanhaus

+0

Können Sie auch die Stack-Trace mit dem tatsächlichen Fehler enthalten? – WMios

Antwort

1

Es sieht aus wie

func viewControllerAtIndex(index : Int) -> UIViewController? { 
    if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) { 
    return nil 
    } 

    let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! PageViewController 
    pageContentViewController.pageIndex = index 


    return pageContentViewController 
} 

Bedürfnisse sein:

func viewControllerAtIndex(index : Int) -> UIViewController? { 
    if((self.viewControllersArray.count == 0) || (index >= self.viewControllersArray.count)) { 
    return nil 
    } 

    return viewControllersArray[index] 
} 

Zusätzlich

let selectedIndex = 1 

sollte

let selectedIndex = 0 

seit 1 bezieht sich auf die zweite Seite.

+1

Das hat funktioniert! Vielen Dank. – evanhaus