descargar - No puedo entender por qué obtengo el error "El controlador de vista de clase no tiene inicializadores" Error en el código de la aplicación Swift para iOS
xcode requirements (2)
En una clase Swift, cada variable declarada no opcional debe inicializarse en uno de los métodos de inicio dados.
En tu caso, es esta variable.
var pageViewController: UIPageViewController
declararlo como opcional implícito sin empaquetar como las otras dos variables, porque se garantiza que la variable se establecerá antes de ser utilizada.
var pageViewController: UIPageViewController!
Estaba intentando hacer una pantalla de tutorial en mi aplicación de iOS en la que el usuario pasa unas cuantas fotos para aprender un poco sobre dicha aplicación. Todo se ve bien, excepto cuando compilo mi proyecto, obtengo el siguiente error en la primera línea de código:
Class ViewController no tiene inicializadores
¿Qué hice mal?
Mi código de ViewController.swift está debajo
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
}
}
Es por esta línea:
var pageViewController: UIPageViewController
Está diciendo que pageViewController
no puede ser nulo, pero no tiene un inicializador que lo establezca en un valor. Mirando tu código, sospecho que quieres cambiarlo a esto:
var pageViewController: UIPageViewController!