2016-04-11 10 views
1

Einrichten einer Seitenansicht innerhalb eines Containers. Befolgte alle Anweisungen, die ich finden konnte (Anfänger).UMit dem Namen aus dem Array wird immer der Wert null zurückgegeben.

Diese beiden Arrays sind in der Hauptansicht-Controller, die Namen der Bilder habe ich die Seiten füllen wollen.

self.shirtImage = NSArray(objects: "shirt1", "shirt2") 
self.pantsImage = NSArray(objects: "pants1", "pants2") 

Wenn ich das Programm ausführen, wobei diese beiden Leitungen:

self.todayShirt.image = UIImage(named: self.shirtName) 
self.todayPants.image = UIImage(named: self.pantsName) 

Rückkehr der Fehler fatal error: unexpectedly found nil while unwrapping an Optional value oder CUICatalog: Invalid asset name supplied: was bedeutet, irgendwie einen Null-Wert aus dem Arrays sie empfangen.

Der Seiteninhalt Klasse sieht wie folgt aus:

class TodayPicksViewController: UIViewController { 

@IBOutlet weak var todayShirt: UIImageView! 
@IBOutlet weak var todayPants: UIImageView! 

var pageIndex: Int! 
var shirtName: String! 
var pantsName: String! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.todayShirt.image = UIImage(named: self.shirtName) 
    self.todayPants.image = UIImage(named: self.pantsName) 

und die Hauptansicht-Controller ist wie folgt aufgebaut:

class ViewController: UIViewController, UIPageViewControllerDataSource { 

var pageViewController: UIPageViewController! 
var shirtImage: NSArray! 
var pantsImage: NSArray! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.shirtImage = NSArray(objects: "shirt1", "shirt2") 
    self.pantsImage = NSArray(objects: "pants1", "pants2") 

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

    let startVC = self.viewControllerAtIndex(0) as TodayPicksViewController 
    let viewControllers = NSArray(object: startVC) 

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


    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.height - 60) 

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

} 

func viewControllerAtIndex(index: Int) -> TodayPicksViewController { 
    if ((self.shirtImage.count == 0) || index >= self.shirtImage.count){ 
     return TodayPicksViewController() 
    } 

    let vc: TodayPicksViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TodayPicksViewController") as! TodayPicksViewController 
    vc.shirtName = self.shirtImage[index] as! String 
    vc.pantsName = self.pantsImage[index] as! String 
    vc.pageIndex = index 


    return vc 
} 

Ich habe ein anderes Projekt, das eine Arbeitsseitenansicht ähnlich wie diese hat und alles funktioniert perfekt und ich habe fast alles genau kopiert, so dass ich nicht herausfinden kann, warum der Wert vom Hauptansicht-Controller nicht richtig zur Seitenansicht in diesem Bereich passt. Jede Hilfe wird geschätzt.

+0

@ Paulw11 bin ich nicht sicher, ob ich folgen. Wie hätte ich das tun sollen? – andrewxt

+0

@andrewxt Ich denke, Sie haben entweder ein Problem, wo Sie das Bild auf die UIImageView einstellen (dh die Syntax für die Einstellung des Bildes ist falsch) oder Sie haben ein Problem bei der Bildbenennung (möglicherweise haben Sie nicht alle Bilder richtig benannt). Ich habe das unten beantwortet, folge einfach, was ich gesagt habe! Es sollte helfen, lass es mich wissen, wenn es nicht so ist. – owlswipe

+0

@ Paulw11 Meinst du dies in der Hauptansicht Controller oder in der Seite Content-View-Controller? – andrewxt

Antwort

0

Etwas läuft falsch, wenn Sie das Bild des UIImageView ändern. Versuchen Sie todayShirt.image = UIImage(imageLiteral: "\(shirtName)") und todayPants.image = UIImage(imageLiteral: "\(pantsName)").

Dann sehr sehr sicher sein, dass Sie 4 Bilder in Ihrem XCode-Projekt eingefügt haben: shirt1.png, shirt2.png, pants1.png und pants2.png. Es ist auch in Ordnung, wenn sie shirt1.jpg sind usw.

Wenn dies immer noch nicht hilft, versuchen Sie Ihre Array-Erstellungsmethode zu ändern. Erstellen Sie die Arrays & fügen Sie Objekte in dem globalen Bereich hinzu, anstatt NSArray zu verwenden und nur Objekte in dem viewdidload() Abschnitt hinzuzufügen. So, jetzt wo Sie var shirtImage: NSArray und var shirtImage: NSArray, entfernen Sie diese beiden und fügen var shirtsArray:NSMutableArray = ["shirt1", "shirt2"] und var pantsArray:NSMutableArray = ["pants1", "pants2"].

+0

Danke für die Antwort. Ich habe die richtigen Assets im Projekt. Wenn ich die imageLiteral-Zeile ausprobiere, besteht Xcode darauf, dass ich endlose Kommas an das Ende anschließe. Nicht sicher, ob es sich um einen IDE-Fehler oder ein anderes Problem handelt. – andrewxt

+0

@andrewxt versuchen Sie es erneut, machte ich einen Fehler mit dem Anführungszeichen/Klammern Platzierung. – owlswipe

+0

Ich habe leider einen Fehler in der gleichen Zeile. Diesmal habe ich jedoch keine Fehlermeldung erhalten. Je nach Fehler-Breakpoint scheinen 'shirtName' und' pantsName' immer noch null zu sein – andrewxt

0

Ich glaube, ich habe das Problem gefunden wird, wird der Code in dieser if-Anweisung eingeben?

if ((self.shirtImage.count == 0) || index >= self.shirtImage.count){ 
    return TodayPicksViewController() 
} 

Wenn ja, shirtName und pantsName wird nie initialisiert worden sind.

+0

Ich dachte, dass ich ihnen Werte in der Methode 'viewControllerAtIndex' des Hauptansicht-Controllers gegeben hatte. Muss ich ihnen Werte an einem anderen Ort geben? – andrewxt

+0

Sie haben Recht, aber ich denke, ich habe das Problem jetzt gefunden, ich habe meine Antwort bearbeitet. – paulvs

+0

Ich versuchte auskommen, dass, wenn Anweisung zu sehen, ob es vc zurückgeben würde, aber ich habe den gleichen Fehler. Ich bin mir nicht sicher, ob es einen Unterschied macht, aber die Seitenansicht befindet sich in einem Container. Wenn es irgendetwas bedeutet, kam der Großteil dieses Codes von diesem [Video] (https://www.youtube.com/watch?v=8bltsDG2ENQ). – andrewxt