2015-08-07 5 views
0

Я пытаюсь добавить свое собственное свойство в MKAnnotation, но так, как я это делаю, я получаю сообщение об ошибке. То, что я хочу сделать, это добавить, кроме title и subtitle например height и rate.Добавление свойства в MKAnnotation дает ошибку EXC_BAD_EXCESS

class MapPin: NSObject, MKAnnotation { 
    var coordinate: CLLocationCoordinate2D 
    var title: String 
    var subtitle: String 
    var imageName: String 

    init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String, imageName: String) { 
     self.coordinate = coordinate 
     self.title = title 
     self.subtitle = subtitle 
     self.imageName = imageName 
    } 
} 

Это, как я определяю свои маркеры:

var request = NSURLRequest(URL: url!) 
    var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) 
    if data != nil { 
     var dataArray = JSON(data: data!) 

     for (key, data) in dataArray { 
      var title = data["name"] 
      var subtitle = data["description"] 
      var lat = data["lat"] 
      var lng = data["lng"] 

      var marker = CustomPointAnnotation() 
      marker.coordinate = CLLocationCoordinate2D(latitude: lat.doubleValue, longitude: lng.doubleValue) 
      marker.title = title.string 
      marker.subtitle = subtitle.string 
      marker.imageName = "marker.png" 
      marker.image = "Test"; 
      mapView.addAnnotation(marker) 
     } 
    } 

И это, где я пытаюсь извлечь данные:

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { 
    println("Called") 

    performSegueWithIdentifier("mapToCity", sender: self) 
    var pinData = view.annotation as! MapPin //EXC_BAD_ACCESS Error 
    var title = pinData.title 
    var subtitle = pinData.subtitle 
    var lat = pinData.coordinate.latitude 
    var lng = pinData.coordinate.longitude 
    var image = pinData.imageName 
    NSUserDefaults.standardUserDefaults().setObject(title, forKey: "title") 
    NSUserDefaults.standardUserDefaults().setObject(subtitle, forKey: "subtitle") 
    NSUserDefaults.standardUserDefaults().setObject(lat, forKey: "lat") 
    NSUserDefaults.standardUserDefaults().setObject(lng, forKey: "lng") 
} 

Я получаю ошибку Thread 1: EXC_BAD_ACCESS (code =1, address=0x4) на линии var pinData когда я пытаюсь выполнить его. Что может быть причиной этого и как его решить?

ответ

0

Во-первых, вам нужно проверить тип аннотаций вы получаете:

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { 
    println("Called") 

    // Below condition is for custom annotation 
    let MapPin= view.annotation as? MapPin 
    println("Subtitle \(MapPin.subtitle)") 
    performSegueWithIdentifier("mapToCity", sender: self) 
    var title = MapPin.title 
    var subtitle = MapPin.subtitle 
    var lat = MapPin.coordinate.latitude 
    var lng = MapPin.coordinate.longitude 
    var image = MapPin.imageName 
    NSUserDefaults.standardUserDefaults().setObject(title, forKey: "title") 
    NSUserDefaults.standardUserDefaults().setObject(subtitle, forKey: "subtitle") 
    NSUserDefaults.standardUserDefaults().setObject(lat, forKey: "lat") 
    NSUserDefaults.standardUserDefaults().setObject(lng, forKey: "lng") 
    }else{ 

    return nil 
    } 
} 
+0

'annotation' не существует в моем коде. И когда я пытаюсь 'view', он говорит, что MKAnnotationView не имеет отношения к типу MKUserLocation. (в строке 3) –

+0

@SinanSamet просмотреть отредактированный ответ и проверить, что значение напечатано или нет? –

+0

Мне пришлось удалить инструкцию else, потому что она дала ошибку, но без нее ее удалось запустить. Когда я нажал на MapPin, он разбился и дал мне ошибку «Thread 1: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, subcode = 0x0)' в строке 'println (« Subtitle ... ' –

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