2016-04-11 13 views
1

Kapsayıcının içine sayfa görünümü ayarlama. Bulduğum tüm talimatları takip ettim (yeni başlayanlar).UIImage dizisinden ad, nil değerini döndürmeye devam ediyor.

Bu iki dizi, sayfaları doldurmak istediğim resimlerin adlarına sahip ana görünüm denetleyicide.

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

I programı çalıştırmak her , bu iki hat: bir şekilde bu diziler bir sıfır değerinin alınması anlamına gelir

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

dönüş hatası fatal error: unexpectedly found nil while unwrapping an Optional value veya CUICatalog: Invalid asset name supplied:.

sayfa içerik sınıfı şuna benzer:

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) 

ve ana görünümü denetleyicisi böyle kurulur:

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 
} 

Ben buna benzer bir çalışma sayfası görünümü vardır başka proje var ve her şey mükemmel çalışıyor ve hemen hemen her şeyin üzerine kopyaladım, bu yüzden ana görünüm denetleyicisinden gelen değerin neden bu sayfada sayfa görünümüne geçmediğini anlayamıyorum. Herhangi bir yardım takdir edilir.

+0

@ Paulw11 Takip ettiğimden emin değilim. Bunu nasıl yapmalıyım? – andrewxt

+0

@andrewxt Görüntüyü UIImageView'e (örneğin, görüntüyü yanlış ayarlamak için sözdizimi) ayarladığınız veya görüntü adında bir sorunla karşılaştığınız bir sorununuz olduğunu düşünüyorum (tüm resimlerin doğru adlandırılmış olmayabilir)). Bunu aşağıya cevapladım, sadece söylediklerimi takip et! Yardım etmeli, yapmazsa haber ver. – owlswipe

+0

@ Paulw11 Bunun, ana görüntü denetleyicisinde mi yoksa sayfa içeriği denetleyicisinde mi olduğunu mu düşünüyorsunuz? – andrewxt

cevap

0

UIImageView görüntüsünü değiştirdiğinizde bir şeyler ters gidiyor. todayShirt.image = UIImage(imageLiteral: "\(shirtName)") ve todayPants.image = UIImage(imageLiteral: "\(pantsName)")'u deneyin. shirt1.png, shirt2.png, pants1.png ve pants2.png:

Sonra XCode projenize takılı 4 resimlere sahip çok çok emin . Ayrıca shirt1.jpg,

Eğer hala yardımcı olmazsa, bu da dizi oluşturma yöntemini değiştirmeyi deneyin. NSArray kullanmak ve viewdidload() bölümünde sadece nesneleri eklemek yerine, sadece global kapsamda & dizi nesne oluşturun. Yani, şu anda var shirtImage: NSArray ve var shirtImage: NSArray'un bulunduğu yerlerden her ikisini de kaldırın ve var shirtsArray:NSMutableArray = ["shirt1", "shirt2"] ve var pantsArray:NSMutableArray = ["pants1", "pants2"]'u ekleyin.

+0

Yanıt için teşekkürler. Projede doğru varlıklarım var. Ayrıca, imageLiteral satırını denediğimde, Xcode, sonuna sonuna sonsuz virgül eklediğimde ısrar ediyor. IDE hatası veya başka bir sorun olup olmadığından emin değil. – andrewxt

+0

@andrewxt tekrar deneyin, tırnak işareti/parantez yerleştirme ile bir hata yaptım. – owlswipe

+0

Maalesef aynı satırda bir hatam var. Ancak bu sefer, hiç bir hata mesajı almadım. Hata kesme noktasına göre, 'shirtName' ve 'pantsName' hala nil – andrewxt

0

Sorununuzu buldum, kodunuz bu if ifadesine mi giriyor?

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

Eğer öyleyse, shirtName ve pantsName başlatıldı edilmiştir asla.

+0

Ana görünüm denetleyicisinin "viewControllerAtIndex" yönteminde değer verdiğimi düşünmüştüm. Onlara başka bir yerde değerler vermem gerekiyor mu? – andrewxt

+0

Haklısın, ama şimdi sorunu buldum, cevabımı düzenledim. – paulvs

+0

Bunun yerine vc geri dönüp dönmeyeceğini görmek için ancak aynı hatayı aldığını görmek için yorum yapmayı denedim. Fark yaratıp yaratmadığından emin değilim, ancak sayfa görünümü bir kapsayıcıda. Bir şey ifade ederse, bu kodun büyük bölümü bu [video] 'dan geldi (https://www.youtube.com/watch?v=8bltsDG2ENQ). – andrewxt

İlgili konular