Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS

fatal error unexpectedly found nil while unwrapping an optional value lldb

fatal error shows up in the code below

ViewController.swift
//  AutoLayout
//
//  Created by Aryan Kashyap on 19/09/2015.
//  Copyright © 2015 Aryan Kashyap. All rights reserved.
//

import UIKit

class ViewController: UIViewController , UIScrollViewDelegate {

    @IBOutlet weak var pageControl: UIPageControl!
    @IBOutlet weak var scrollView: UIScrollView!

    var pageImages : [UIImage!] = []
    var pageViews : [UIImageView?] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        //1

    // The Error shows up on this line 
        pageImages = [UIImage(named:"Asia.png")!,UIImage(named:"Europe.png")!]

        let pageCount = pageImages.count

        //2 
        pageControl.currentPage = 0
        pageControl.numberOfPages = pageCount

        //3
        for _ in 0..<pageCount {
         pageViews.append(nil)
        }

        //4
        let pagesScrollViewSize = scrollView.frame.size
        scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(pageImages.count), pagesScrollViewSize.height)

        //5
        loadVisiblePages()

    }
    func loadPage(page: Int) {

        if page < 0 || page >= pageImages.count {
            // If it's outside the range of what you have to display, then do nothing
            return
        }

        // 1
        if let _ = pageViews[page] {
            // Do nothing. The view is already loaded.
        } else {
            // 2
            var frame = scrollView.bounds
            frame.origin.x = frame.size.width * CGFloat(page)
            frame.origin.y = 0.0

            // 3
            let newPageView = UIImageView(image: pageImages[page])
            newPageView.contentMode = .ScaleAspectFit
            newPageView.frame = frame
            scrollView.addSubview(newPageView)

            // 4
            pageViews[page] = newPageView
        }
    }

    func purgePage(page: Int) {

        if page < 0 || page >= pageImages.count {
            // If it's outside the range of what you have to display, then do nothing
            return
        }

        // Remove a page from the scroll view and reset the container array
        if let pageView = pageViews[page] {
            pageView.removeFromSuperview()
            pageViews[page] = nil
        }

    }




    func loadVisiblePages() {

        // First, determine which page is currently visible
        let pageWidth = scrollView.frame.size.width
        let page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth * 2.0)))

        // Update the page control
        pageControl.currentPage = page

        // Work out which pages you want to load
        let firstPage = page - 1
        let lastPage = page + 1


        // Purge anything before the first page
        for var index = 0; index < firstPage; ++index {
            purgePage(index)
        }

        // Load pages in our range
        for var index = firstPage; index <= lastPage; ++index {
            loadPage(index)
        }

        // Purge anything after the last page
        for var index = lastPage+1; index < pageImages.count; ++index {
            purgePage(index)
        }

    }

    func scrollViewDidScroll(scrollView: UIScrollView!) {
        // Load the pages that are now on screen
        loadVisiblePages()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
 }

If I were you, I'd use the "if let" statement to check if your Images are really names "Asia.png" or if they really exist.

if let myElement1 = UIImage(named:"Asia.png")! { if let myElement2 = UIImage(named:"Europe.png")! { pageImages = [myElement1,myElement2] } else { // something else to do : there's a problem with image 2} } else { // something else to do : there's a problem with image 1}

let me know.