Search code examples
iosuitableviewswiftxcode6reloaddata

reloadData() fatal error: unexpectedly found nil while unwrapping an Optional value


The app crashes at the line enter image description here

class ImageValueCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var imagesList: UITableView!
  var imageArray: NSArray!

override func awakeFromNib() {
    //super.awakeFromNib()
    // Initialization code
    imagesList.delegate = self;
    imagesList.dataSource = self;
    imageArray = NSArray()
    imagesList.reloadData()
}

func addImagesValue(objectList: NSMutableArray, machine: WIFIMachine){
    imageArray = objectList
    imagesList.reloadData() //CRASHED HERE
  }

}

I trace through and found that imageList is nil when the crash happens. This is a custom cell with a UITableView created on the storyboard. Can anyone advise me on the possible solution that i could try?


Solution

  • If you are calling addImagesValue before the awakeFromNib is called, then your code will empty the array. I don't think that is what you want. Here is a better solution:

    class ImageValueCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {
    
        @IBOutlet weak var imagesList: UITableView!
        var imageArray: NSArray = NSArray() {
            didSet {
                // whenever the imageArray changes, reload the imagesList
                if let imagesList = imagesList {
                    imagesList.reloadData()
                }
            }
        }
    
        override func awakeFromNib() {
            // why isn't the below done from inside the nib file? That's how I would do it.
            imagesList.delegate = self
            imagesList.dataSource = self
            imagesList.reloadData()
        }
    
        func addImagesValue(objectList: NSMutableArray, machine: WIFIMachine){
            imageArray = objectList
        }
    
    }