title: EXC_BAD_ACCESS When I present view controller with market inside
body: <p>I have a problem presenting a view controller with a Mapkit inside. The first time I presented it works ok, but when I presented again it throw an EXC_BAD_ACCESS ERROR. Programming language is swift. Any help is appreciated.
  Xcode 6.4. iOS 8</p>
  
  <p>ViewController.swift</p>
  
  <pre><code>@IBAction func OnClickTallaCamiseta(sender: AnyObject)
  {
      txtTallaCamiseta.endEditing(true);
      //ocultarTallaCamiseta();
  
      self.performSegueWithIdentifier("mostrarMapa", sender: self)
  }
  
  func hecho(controller: MapaController, ciudad: String, departamento: String, pais: String)
  {
      navigationController?.setNavigationBarHidden(true, animated: true);
  
      ciudadSeleccionada = ciudad;
      departamentoSeleccionado = departamento;
      paisSeleccionado = pais;
  
      var label:String = "";
  
      if(ciudadSeleccionada != "NO_DATA")
      {
          label += ciudadSeleccionada;
      }
  
      if(departamentoSeleccionado != "NO_DATA")
      {
          label += ", " + departamentoSeleccionado;
      }
  
      if(paisSeleccionado != "NO_DATA")
      {
          label += ", " + paisSeleccionado;
      }
  
      lblCiudadEres.text = label;
  
      self.navigationController?.popViewControllerAnimated(true);
  }
  
  func terminado(controller: MapaController)
  {
      println("terminado");
      navigationController?.setNavigationBarHidden(true, animated: true);
      self.navigationController?.popViewControllerAnimated(true);
  }
  </code></pre>
  
  <p>MapaController.swift</p>
  
  <pre><code>import Foundation
  import UIKit
  import GoogleMaps
  import MapKit
  import CoreLocation
  
  protocol MapaControllerDelegate
  {
  func terminado(controller:MapaController);
  func hecho(controller:MapaController, ciudad:String,     departamento:String, pais:String);
  }
  
  class MapaController : UIViewController, UITableViewDataSource, UITableViewDelegate,
  GPSDelegate, MKMapViewDelegate
  {
  @IBOutlet weak var tableView: UITableView!
  @IBOutlet weak var btnDone: UIBarButtonItem!
  @IBOutlet weak var txtSearch: UITextField!
  
  var locationManager:CLLocationManager = CLLocationManager();
  var camera:GMSCameraPosition? = nil;
  var aqui:CLLocationCoordinate2D? = nil;
  var ne:CLLocationCoordinate2D? = nil;
  var sw:CLLocationCoordinate2D? = nil;
  var bounds:GMSCoordinateBounds? = nil;
  var placesClient:GMSPlacesClient = GMSPlacesClient();
  var data:[GMSAutocompletePrediction] = [GMSAutocompletePrediction]();
  var ciudad = "";
  var departamento = "";
  var pais = "";
  var delegate:MapaControllerDelegate? = nil;
  var gps = GPSLocation;
  
  let filter = GMSAutocompleteFilter();
  
  required init(coder aDecoder: NSCoder)
  {
      super.init(coder: aDecoder)
  }
  
  override func viewDidLoad()
  {
      super.viewDidLoad();
  
      placesClient = GMSPlacesClient();
      filter.type = GMSPlacesAutocompleteTypeFilter.Geocode;
  
      self.tableView.dataSource = self;
      self.tableView.delegate = self;
      self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell");
      self.tableView.hidden = true;
  
      self.btnDone.enabled = false;
  
      navigationController?.setNavigationBarHidden(false, animated: true);
  
  
      //setMarkerAndMoveCamera(gps.lat, longitud: gps.long);
  
      gps.gpsDelegate = self;
      println("TERMINA");    }
  
  @IBAction func OnTextChanged(sender: AnyObject)
  {
      if(!txtSearch.text.isEmpty)
      {
          //println("Searching for '\(self.txtSearch.text)'");
  
          placesClient.autocompleteQuery(self.txtSearch.text,
              bounds: bounds,
              filter: filter,
              callback: { (results, error) -&gt; Void in
                  if error != nil
                  {
                      println("Autocomplete error \(error) for query '\(self.txtSearch.text)'")
                      return
                  }
  
                  //println("Populating results for query '\(self.txtSearch.text)'");
                  self.data = [GMSAutocompletePrediction]();
  
                  for result in results!
                  {
                      if let result = result as? GMSAutocompletePrediction
                      {
                          self.data.append(result)
                      }
                  }
  
                  self.tableView.reloadData();
                  self.tableView.hidden = false;
  
                  if(!self.btnDone.enabled)
                  {
                      self.btnDone.enabled = true;
                  }
          });
      }
      else
      {
          self.data = [GMSAutocompletePrediction]()
          self.tableView.reloadData()
          self.tableView.hidden = true;
      }
  }
  
  func CoordUpdated(latitud: Double, longitud: Double)
  {
      moverCamara(latitud, longitud: longitud);
  
      aqui = CLLocationCoordinate2DMake(latitud, longitud);
      ne = CLLocationCoordinate2DMake(aqui!.latitude + 1, aqui!.longitude + 1);
      sw = CLLocationCoordinate2DMake(aqui!.latitude - 1, aqui!.longitude - 1);
      bounds = GMSCoordinateBounds(coordinate: ne!, coordinate: sw!);
  }
  
  func CoordenadasGuardadas(exito: Bool){}
  
  func VisitaMarcada(exito: Bool){}
  
  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int
  {
      return self.data.count;
  }
  
  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCell
  {
      var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell;
  
      cell.textLabel?.text = self.data[indexPath.row].attributedFullText.string;
  
      return cell;
  }
  
  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
  {
      txtSearch.text = self.data[indexPath.row].attributedFullText.string;
      txtSearch.endEditing(true);
  
      var placeId:String = self.data[indexPath.row].placeID;
      tableView.hidden = true;
  
      placesClient.lookUpPlaceID(placeId,
          callback: {(place, error) -&gt; Void in
          if error != nil
          {
              println("lookup place id query error: \(error!.localizedDescription)")
              return
          }
  
          if place != nil
          {
              var coordenada:CLLocationCoordinate2D = place!.coordinate;
              var lat = coordenada.latitude;
              var long = coordenada.longitude;
  
              self.setMarkerAndMoveCamera(lat, longitud: long);
  
              var array = split(self.data[indexPath.row].attributedFullText.string) {$0 == ","};
  
              if(array.count == 3)
              {
                  self.ciudad = array[0];
                  self.departamento = array[1];
                  self.pais = array[2];
              }
              else if(array.count == 2)
              {
                  self.ciudad = array[0];
                  self.departamento = "NO_DATA";
                  self.pais = array[1];
              }
              else
              {
                  self.ciudad = array[0];
                  self.departamento = "NO_DATA";
                  self.pais = "NO_DATA";
              }
          }
          else
          {
              println("No place details for \(placeId)")
          }
      });
  }
  
  func moverCamara(latitud:Double, longitud:Double)
  {
      /*let location = CLLocationCoordinate2D(latitude: latitud, longitude: longitud)
      let span = MKCoordinateSpanMake(0.05, 0.05)
      let region = MKCoordinateRegion(center: location, span: span)
  
      mapa.setRegion(region, animated: true)*/
  }
  
  func setMarkerAndMoveCamera(latitud:Double, longitud:Double)
  {
      /*let location = CLLocationCoordinate2D(latitude: latitud, longitude: longitud)
      let span = MKCoordinateSpanMake(0.05, 0.05)
      let region = MKCoordinateRegion(center: location, span: span)
  
      mapa.setRegion(region, animated: true)
  
      let annotationsToRemove = self.mapa.annotations.filter { $0 !== self.mapa.userLocation }
      mapa.removeAnnotations( annotationsToRemove )
  
      let annotation = MKPointAnnotation()
      annotation.coordinate = location;
      annotation.title = NSLocalizedString("label_ciudad_encontrada",comment:"label_ciudad_encontrada");
  
      mapa.addAnnotation(annotation);*/
  }
  
  @IBAction func OnDone(sender: AnyObject)
  {
      delegate?.hecho(self, ciudad: ciudad, departamento: departamento, pais: pais);
  }
  
  @IBAction func OnCancel(sender: AnyObject)
  {
      delegate?.terminado(self);
  }
  
  override func viewWillDisappear(animated:Bool)
  {
      self.tableView.delegate = nil;
  }
  @IBAction func onCancelar(sender: AnyObject)
  {
      delegate?.terminado(self);
  }
  }
  </code></pre>