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

Aryan Kashyap
Courses Plus Student 5,943 Pointsfatal error unexpectedly found nil while unwrapping an optional value lldb
fatal error shows up in the code below
// 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()
}
}
Jeanne Merle
3,390 PointsJeanne Merle
3,390 PointsIf 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.