         case .Delete:
             tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
         case .Update:
-            let value = self.objectAtIndexPath(indexPath!)
-            if let cell = tableView.cellForRowAtIndexPath(indexPath!) as? CellType {
+            if let cell = tableView.cellForRowAtIndexPath(indexPath!) as? CellType,
+                let value = self.objectAtIndexPath(indexPath!) {
                 self.presenter.configureCellBlock(cell, value)
             }
         case .Move:

        let value = self.objectAtIndexPath(indexPath)

        let reuseIdentifier = self.presenter.cellReuseIdentifier
        let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CellType

        self.presenter.configureCellBlock(cell, value)

        return cell
    }

    public func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {


    public func refreshData() {
        TryCatchFinally.handleTryBlock({ () -> Void in
            do {
                try self.fetchedResultsController.performFetch()
            } catch {}
            self.tableView.reloadData()
        }) { (exception: NSException!) -> Void in
            let error = NSError(domain: "", code: 9999, userInfo: exception.userInfo)
            self.logger.logError(error)
        }
    }

    public func objectAtIndexPath(indexPath: NSIndexPath) -> EntityType? {
        return self.fetchedResultsController.objectAtIndexPath(indexPath) as? EntityType
    }

    public func indexPathForObject(object: EntityType) -> NSIndexPath? {
