2015-10-26 2 views
1

Я разрабатываю приложение для ios 9. с тех пор, как я обновил до версии 7.1. У меня есть эта ошибка: Ошибка команды из-за сигнала: Ошибка сегментации: 11Сбой команды из-за сигнала: Ошибка сегментации: 11 после обновления до Xcode 7.1

Глядя в коде, я обнаружил, что этот код вызывает эту ошибку:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if !(annotation is ADBaseAnnotation){ 
     print("No es ADBaseAnnotation",terminator:"\n") 
     return nil 
    } 

    var anView = mapView.dequeueReusableAnnotationViewWithIdentifier((annotation as! ADBaseAnnotation).getReuseId()) 
    if let normal = annotation as? NormalParking { 
     //anView = normal.getAnnotationView(annotation, reuseIdentifier: normal.getReuseId()) 
    } else if let hightlight = annotation as? HightLightParking{ 
     //anView = hightlight.getAnnotationView(annotation, reuseIdentifier: hightlight.getReuseId()) 
    } 
    return anView 
} 

ошибка вызывает по комментируемым линиям. Пожалуйста, помогите

ответ

1

Является ли это проблемой, когда компилятор действительно терпит неудачу или он по-прежнему выделяет строки кода, где произошла ошибка после компиляции, как обычно? У меня это происходит часто, когда компилятор путается с кодом, который я написал, и не может скомпилировать и не создавать сбои внутри. Вы можете найти более подробную информацию в журнале компиляции, если это так. Обычно это моя собственная ошибка, но компилятор все еще слишком новен, чтобы дать хорошую обратную связь или обработать ситуацию элегантным способом.

Я не знаю точно, но я заметил некоторые вещи о вашем коде. То, что выглядит смешно для меня следующее:

if let normal = annotation as? NormalParking { 
     anView = normal.getAnnotationView(annotation, reuseIdentifier: normal.getReuseId()) 
    } 

Почему вы не использовать ту же переменную с приведением как:

if let normal = annotation as? NormalParking { 
     anView = normal.getAnnotationView(normal, reuseIdentifier: normal.getReuseId()) 
    } 

Также вы точно так же после заброса, вам не нужно вообще на самом деле.

Например:

guard let annotation = annotation as? ADBaseAnnotation else { 
    print("No es ADBaseAnnotation",terminator:"\n") 
    return nil 
} 

if annotation is NormalParking || annotation is HightLightParking { 
    return annotation.getAnnotationView(annotation, reuseIdentifier: annotation.getReuseId()) 
} 

return mapView.dequeueReusableAnnotationViewWithIdentifier(annotation).getReuseId()) 

Я предполагаю, что ADBaseAnnotation является общим базовым классом определения getReuseId() и ваши реализации Парковочные переопределить getReuseId()

+0

Привет, эффективно ADBaseAnnotation является общим классом. Компилятор падал с неизвестной ошибкой, не является синтаксической ошибкой. Перед обновлением Xcode работал этот код. Я проверил ваш код и отлично работает. Gracias! – ClarkXP

+0

Возможно, ваш код был правильным, но слишком запутанным для компилятора. Свифт едва год! У меня была аналогичная проблема с фильтром карты на кортеже, какая-то странная цепочка методов, которые она не могла решить. –

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