2015-12-09 3 views
-1

Я получаюПочему я получаю "EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкодовое = 0x0)"

"EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)"

в этом коде

else { 
    let latitude = NSString(string: places[activePlace]["lat"]!).doubleValue 
    let longitude = NSString(string: places[activePlace]["lon"]!).doubleValue 
    let coordinate = CLLocationCoordinate2DMake(latitude, longitude) 
    let latDelta:CLLocationDegrees = 0.01 
    let lonDelta:CLLocationDegrees = 0.01 
    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 
    let region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span) 
    self.Map.setRegion(region, animated: true) 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = coordinate 

    annotation.title = places[activePlace]["name"] 
    self.Map.addAnnotation(annotation) 

на

let latitude = NSString(string: places[activePlace]["lat"]!).doubleValue 

вот мой активная переменная места на месте находится в предыдущем представлении таблицы

вар activePlace = -1]

еще в Tableview у меня есть этот

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 

     activePlace = indexPath.row 

     return indexPath 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "newPlace" { 

      activePlace = -1 


     } 

во втором контроллере представления (где у меня есть проблемы) у меня это с точки зрения сделал нагрузки

manager = CLLocationManager() 
manager.delegate = self 
manager.desiredAccuracy = kCLLocationAccuracyBest 

if activePlace == -1 { 

    manager.requestWhenInUseAuthorization() 
    manager.startUpdatingLocation() 


} else { 



    let latitude = NSString(string: places[activePlace]["lat"]!).doubleValue 

    let longitude = NSString(string: places[activePlace]["lon"]!).doubleValue 

    let coordinate = CLLocationCoordinate2DMake(latitude, longitude) 

    let latDelta:CLLocationDegrees = 0.01 

    let lonDelta:CLLocationDegrees = 0.01 

    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 

    let region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span) 

    self.Map.setRegion(region, animated: true) 

    let annotation = MKPointAnnotation() 

    annotation.coordinate = coordinate 


    annotation.title = places[activePlace]["name"] 

    self.Map.addAnnotation(annotation) 

Этот код уже был там и работал идеально, пока я не добавил следующий код

@IBAction func addCurentLoc(sender: UIBarButtonItem) { 

     var newCoordinate2 = self.Map.userLocation.location!.coordinate; 

     var location = CLLocation(latitude: newCoordinate2.latitude, longitude: newCoordinate2.longitude) 

     title = "new address" 


     let annotation = MKPointAnnotation(); 
     annotation.title = title; 
     annotation.coordinate = self.Map.userLocation.location!.coordinate; 

     CLGeocoder().reverseGeocodeLocation(location) { (placemarks, error) -> Void in 

      var title = "" 

      if (error == nil) { 

       if let p = placemarks?[0] { 

        var subThouroughfare:String = "" 
        var thouroughfare:String = "" 

        if p.subThoroughfare != nil { 

         subThouroughfare = p.subThoroughfare! 

        } 

        if p.thoroughfare != nil { 

         thouroughfare = p.thoroughfare! 

        } 

        title = "\(subThouroughfare) \(thouroughfare)" 


       } 

      } 

      if title == "" { 

       title = "Added \(NSDate())" 

      } 

      places.append(["name":title,"lat":"\(newCoordinate2.latitude)","lon":"\(newCoordinate2.longitude)"]) 

      let annotation = MKPointAnnotation() 

      annotation.coordinate = newCoordinate2 

      annotation.title = title 

      self.Map.addAnnotation(annotation) 

     } 

     self.Map.addAnnotation(annotation); 



     func mapView(mapView: MKMapView!, 
      viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!{ 
       if(annotation is MKUserLocation){ 
        return nil; 
       } 

       let pinView: Void = mapView.addAnnotation(annotation); 
       let pinAnnotationView = MKPinAnnotationView(annotation: annotation,reuseIdentifier:"MyIdentifier"); 
       return pinAnnotationView; 

         } 



    } 

Я искал решение на некоторое время и не может узнать, обратите внимание, что я проверил этот ответ

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) on dispatch_semaphore_dispose

, а также это один

what does Error "Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)" mean?

но не нашли решение, спасибо за помощь

EDIT: Обратите внимание, что этот вопрос был изменен, чтобы быть немного понятнее, пожалуйста, спросите, нужно ли вам больше i NFO.

+0

Поместите контрольные точки, и вы можете найти, на какой линии вы получаете эту ошибку. –

+1

положите выражение print (места [activePlace] ["lat"]) перед вашим первым назначением (как первый оператор после else {) и покажите нам результат – user3441734

+0

@ user3441734, результат будет точно таким же, за исключением сообщения об ошибке на принтере (места [activePlace] ["lat"]) line –

ответ

0

Поставьте точку останова на первой строке еще затем введите в lldb:

po places[activePlace] - не возвращает значение или ноль?

если тип возвращает значение places[activePlace]["lat"]!

Один из них, вероятно, возвращать ноль, ошибка вы получаете означает, что вы неявно разворачивания ноль.

+0

Как вы вводите что-то в LLDB? –

+0

1) Запустите приложение 2) Откройте нижнюю панель, если она еще не открыта 3) с левой стороны у вас есть все переменные в текущей области, справа есть ваши сообщения в журнале, и именно там вы вводите свои команды, как только вы нажмете точка останова – 66o

+1

это сообщение, которое я получаю po places [activePlace] фатальная ошибка: индекс массива за пределами допустимого диапазона ошибка: выполнение прервано, причина: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, subcode = 0x0). Процесс был возвращен государству до оценки выражения. (lldb) –

Смежные вопросы