Todos los IBOutlets son nulos

Hola, estoy inicializando viewController usando este código:

var aboutUsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AboutUsViewController") as AboutUsViewController 

Después de esto me aboutViewController a aboutViewController . ¡Sin embargo, todos mis IBOutlets en aboutViewController son nil ! ¿Por qué es así? Estoy usando la biblioteca MMDrawer para tener el menu de la barra lateral.

  var aboutUsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AboutUsViewController") as AboutUsViewController var aboutUsNavController = UINavigationController(rootViewController: aboutUsViewController) var appDelegate: AppDelegate = UIApplication.shanetworkingApplication().delegate as AppDelegate appDelegate.centerContainer!.centerViewController = aboutUsNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 

En la barra lateral estoy eligiendo acerca de nuestro elemento del menu y después de que estoy creando AboutViewController y moviéndolo a la izquierda … El problema es que cuando inicializo mi controller, los sockets son nulos

También estoy teniendo este tipo de problema al usar pageViewController:

 class ViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { let pageTitles = ["Title 1", "Title 2", "Title 3", "Title 4"] var images = ["long3","long4","long1","long2"] var count = 0 var pageViewController : UIPageViewController! override func viewDidLoad() { super.viewDidLoad() reset() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func reset() { /* Getting the page View controller */ pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as UIPageViewController self.pageViewController.dataSource = self let pageContentViewController = self.viewControllerAtIndex(0) self.pageViewController.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) /* We are substracting 30 because we have a start again button whose height is 30*/ self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height - 30) self.addChildViewController(pageViewController) self.view.addSubview(pageViewController.view) self.pageViewController.didMoveToParentViewController(self) } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { var index = (viewController as PageContentViewController).pageIndex! index++ if (index >= self.images.count){ return nil } return self.viewControllerAtIndex(index) } func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { var index = (viewController as PageContentViewController).pageIndex! if index<=0 { return nil } index-- return self.viewControllerAtIndex(index) } func viewControllerAtIndex(index : Int) -> UIViewController? { if((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) { return nil } let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as PageContentViewController pageContentViewController.imageName = self.images[index] pageContentViewController.titleText = self.pageTitles[index] pageContentViewController.pageIndex = index return pageContentViewController } func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return pageTitles.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 } } class PageContentViewController: UIPageViewController { @IBOutlet var imageViewMain: UIImageView! @IBOutlet var labelMain: UILabel! var pageIndex: Int! var titleText: String! var imageName: String! override func viewDidLoad() { super.viewDidLoad() self.imageViewMain.image = UIImage(named:imageName) self.labelMain.text = self.titleText self.labelMain.alpha = 0.1 UIView.animateWithDuration(1.0, animations:{ ()-> Void in self.labelMain.alpha = 1.0 }) // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ } 

¡Estoy teniendo problemas con que la label y la salida de image son nulas! El mismo problema que tuve con la librería MMDrawer. La misma situación. ¡No estoy usando segues! Creo que debido a que los puntos de venta son nulos

Supongo que está mirando los puntos de venta inmediatamente después de crear una instancia de la escena (también verá este comportamiento si usa segues e intenta usar las salidas en prepareForSegue ). Pero las salidas no están conectadas hasta después de que presente / presione a esa escena, la vista se carga y se llama a viewDidLoad .

En viewDidLoad , no intente usar las tomas antes de viewDidLoad a viewDidLoad (es decir, no utilice tomas de viewDidLoad inmediatamente después de instanciar la escena). En su lugar, pase los datos necesarios a la escena de destino (por ejemplo, una propiedad String ), y la viewDidLoad del destino debería llenar el mercado.

Por ejemplo, puede tener una propiedad en AboutUsViewController :

 var message: String! 

Cuando AboutUsViewController instancia de AboutUsViewController , configuró esa propiedad:

 let aboutUsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AboutUsViewController") as AboutUsViewController // use `as!` in Swift 1.2 aboutUsViewController.message = "some message" presentViewController(aboutUsViewController, animated: true, completion: nil) 

Y luego, viewDidLoad of AboutUsViewController usaría esa propiedad para llenar el mercado de manera correspondiente:

 override func viewDidLoad() { super.viewDidLoad() label1.text = message } 

Pero nunca tendría el controller de vista de origen intentar configurar / ajustar las salidas de la escena de destino. Esa es la responsabilidad de AboutUsViewController .


Solo para confirmar, ¿sus tomas están conectadas correctamente? A continuación, se muestran dos maneras de confirmar que están conectadas correctamente.

Cuando selecciona el controller de vista en Interface Builder y luego busca en el inspector de conexiones, ¿ve sus sockets conectados allí? En la siguiente instantánea, la label1 está conectada, pero la label2 no es:

introduzca la descripción de la imagen aquí

O cuando miras tu código y miras las salidas, ¿ves puntos sólidos en el margen izquierdo (es decir, que la toma está conectada) o puntos vacíos (lo que significa que el tomastream no está conectado)?

introduzca la descripción de la imagen aquí

Encontré la respuesta ¡En lugar de crear UIViewController, creé UIPageViewController!