2015-07-06 17 views
16

Stavo cercando di creare una schermata di esercitazione nella mia app iOS in cui l'utente scorre alcune foto per apprendere qualcosa la suddetta domanda. Tutto sembra bene, tranne quando costruire il mio progetto, ho il seguente errore sulla prima riga di codice:Impossibile capire perché sto ricevendo "Class ViewController non ha inizializzatori" Errore nel codice app Swift iOS

Classe ViewController non ha initializers

Che cosa ho fatto di sbagliato?

codice

mio ViewController.swift è al di sotto

import UIKit 

//line below is where I get the error 

class ViewController: UIViewController, UIPageViewControllerDataSource { 

//end 

var pageViewController: UIPageViewController 
var pageTitles: NSArray! 
var pageImages: NSArray! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pageTitles = NSArray(objects: "", "", "") 
    self.pageImages = NSArray(objects: "page1", "page2", "page3") 

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! 
    UIPageViewController 

    self.pageViewController.dataSource = self 

    var startVC = self.viewControllerAtIndex(0) as ContentViewController 
    var viewControllers = NSArray(object: startVC) 

    self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil) 

    self.addChildViewController(self.pageViewController) 
    self.view.addSubview(self.pageViewController.view) 
    self.pageViewController.didMoveToParentViewController(self) 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func restartAction(sender: AnyObject) { 
} 

func viewControllerAtIndex(index: Int) -> ContentViewController 
{ 

    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) 
    { 
     return ContentViewController() 
    } 

    var vc: ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController 

    vc.imageFile = self.pageImages[index] as! String 
    vc.titleText = self.pageTitles[index] as! String 

    vc.pageIndex = index 

    return vc 

} 

// Mark: - Page View Controller Data Source 

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

    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if (index == 0 || index == NSNotFound) 
    { 
     return nil 
    } 

    index-- 
    return self.viewControllerAtIndex(index) 

} 

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

    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if (index == NSNotFound) 
    { 
     return nil 
    } 

    index++ 

    if (index == self.pageTitles.count) 
    { 
     return nil 
    } 

    return self.viewControllerAtIndex(index) 
} 

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return self.pageTitles.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return 0 
} 

} 
+0

Alse vedere [classe non ha initializers Swift] (https://stackoverflow.com/questions/27797351/class-has-no-initializers-swift?noredirect=1&lq=1) – Honey

risposta

30

E 'a causa di questa linea:

var pageViewController: UIPageViewController 

stai dicendo che pageViewController non può essere nullo, ma non si dispone di un inizializzatore che imposta su un valore. Guardando il codice, ho il sospetto che si vuole cambiare a questo:

var pageViewController: UIPageViewController! 

I went into more detail on this problem here.

+1

Grazie! Ora funziona! –

+0

Sei il benvenuto. Non dimenticare: se contrassegni la risposta come corretta, aiuta anche gli altri. – TwoStraws

+0

Stavo per ma StackOverflow mi ha detto di aspettare qualche minuto :) –

7

In una classe Swift ogni variabile dichiarata non facoltativa deve essere inizializzato in una delle date metodi init.

Nel tuo caso, si tratta di questa variabile

var pageViewController: UIPageViewController 

dichiarano come implicita scartato optional come le altre due variabili, perché la variabile è garantito per essere impostata prima di essere utilizzato.

var pageViewController: UIPageViewController! 
+0

Grazie mille! Ha funzionato! –

Problemi correlati