title: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray
body: <p>why do I keep getting the following error </p>
  
  <blockquote>
    <p><strong>* Terminating app due to uncaught exception 'NSRangeException', reason: '*</strong> -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray'
    *** First throw call stack:
    (0x183702db0 0x182d67f80 0x1836799ac 0x18d48f6d4 0x10003999c 0x100039b04 0x188860c40 0x1888790d0 0x188a13e5c 0x18891fe40 0x18891fb1c 0x18891fa84 0x194f41fd0 0x18885c1e4 0x1861ee994 0x1861e95d0 0x1861e9490 0x1861e8ac0 0x1861e8820 0x18885eff4 0x1836b909c 0x1836b8b30 0x1836b6830 0x1835e0c50 0x184ec8088 0x1888ca088 0x10003fd7c 0x18317e8b8)
    libc++abi.dylib: terminating with uncaught exception of type NSException</p>
  </blockquote>
  
  <p>the code for my initial viewcontroller is given below</p>
  
  <pre><code>import UIKit
  import CoreData
  class NotesListTableViewController: UITableViewController  {
  var managedObjectContext : NSManagedObjectContext!
  var entries: [NSManagedObject]!
  
  override func viewDidLoad()
  {
      super.viewDidLoad()
  
  
      let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
      managedObjectContext = appDelegate.managedObjectContext
      //self.fetchEntries()
  
            // makes the searchbar stay in the current screen and not spill into the next screen
  //definesPresentationContext = true
  
      // Uncomment the following line to preserve selection between presentations
      // self.clearsSelectionOnViewWillAppear = false
  
      // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
      // self.navigationItem.rightBarButtonItem = self.editButtonItem()
  }
  
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
  
  // MARK: - Table view data source
  
  
  
  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int
  {
      return self.entries.count
  
  
  }
  override func numberOfSectionsInTableView(tableView: UITableView) -&gt; Int
  {
      return 1
  }
  
  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCell
  {
      let cell = tableView.dequeueReusableCellWithIdentifier("NotesCell", forIndexPath: indexPath)
  
      // Configure the cell...
          let entry1 = entries[indexPath.row]
          cell.textLabel?.text = entry1.valueForKey("entry_body") as? String
  
  
          let imageData2 = entry1.valueForKey("entry_image") as? NSData
  
          if let imageData2 = imageData2
          {
              let myimage = UIImage(data:imageData2,scale:1.0)
              cell.imageView?.image = myimage
          }
  
  
  
  
  
      return cell
  
  }
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
  {
      if segue.identifier! == "showNote"
      {
          let detailDisplay = segue.destinationViewController as! DetailDisplayViewController
          let selectedIndexPath = tableView.indexPathForSelectedRow!
          let entry = entries[selectedIndexPath.row]
          detailDisplay.entry = entry
      }
  }
  override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
  {
      let entry1 = self.entries[indexPath.row]
      self.managedObjectContext.deleteObject(entry1)
      self.entries.removeAtIndex(indexPath.row)
      self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
      do
      {
          try managedObjectContext.save()
      } catch  {
          print ("could not save the new entry ")
      }
  
  
  }
  override func viewWillAppear(animated: Bool)
  {
      super.viewWillAppear(animated)
      self.tabBarController?.tabBar.hidden = false
  
      self.fetchEntries()
  
  }
  
  func fetchEntries()
  {
      let fetchRequest = NSFetchRequest(entityName:"Entry")
      do {
          let entryObjects = try managedObjectContext.executeFetchRequest(fetchRequest)
          self.entries = entryObjects as! [NSManagedObject]
      }catch let error as NSError
      {
          print ("could not save the new entry \(error.description) ")
      }
      tableView.reloadData()
  
  
  
  }
  }
  </code></pre>