由于未捕获的异常

由于未捕获的异常

为什么我不断收到以下错误



下面给出了我的初始 View Controller 的代码

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) -> Int
{
    return self.entries.count


}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
    return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 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()



}
}

最佳答案

它崩溃是因为数组 self.entries 不包含任何对象。您应该在刷新表之前检查它。

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) ")
    }

    if !self.entries.isEmpty  // if your array is not empty refresh the tableview
    {
        tableView.reloadData()
    }

}

关于ios - *** 由于未捕获的异常 'NSRangeException' 终止应用程序,原因是 : '*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38304437/

10-12 16:42