2015-04-13 9 views
6

Używam Google Maps iOS SDK w mojej aplikacji, wszystko działało świetnie do dziś. Pobrałem Xcode 6.3 i otrzymałem kilka błędów. Załatwione wszystkie z nich, z wyjątkiem dwóch błędów w mojej klasie MapViewController, które pojawiło się na tych dwóch metod:"Metoda Objective-C powoduje konflikty z opcjonalną metodą wymagania" błąd po aktualizacji do XCode 6.3 (Swift 1.2)

Pierwsza metoda:

func mapView(mapView: GMSMapView!, didTapMarker marker: ExtendedMarker!) -> Bool { 
    ... some code ... 
} 

z błędem:

Objective-C method 'mapView:didTapMarker:' provided by method 'mapView(:didTapMarker:)' conflicts with optional requirement method 'mapView(:didTapMarker:)' in protocol 'GMSMapViewDelegate'

druga metoda:

func mapView(mapView: GMSMapView!, markerInfoContents marker: ExtendedMarker!) -> UIView! { 
    ... some code ... 
} 

z błędem:

Objective-C method 'mapView:markerInfoContents:' provided by method 'mapView(:markerInfoContents:)' conflicts with optional requirement method 'mapView(:markerInfoContents:)' in protocol 'GMSMapViewDelegate'

Próbowałem przepisywanie tych metod, ale to nie pomogło. Sprawdziłem również aktualizację w Google Maps SDK, ale ostatnia aktualizacja jest od lutego 2015.

Byłbym wdzięczny za wszelkie porady, z góry dziękuję! :)

+0

możliwe duplikat [Błąd kompilatora: Metoda z Objective-C konfliktów selektora z poprzedniej deklaracji z tego samego selektora Objective-C] (http://stackoverflow.com/questions/29457720/compiler-error-method- with-objective-c-selector-conflict-with-previous-declara) –

Odpowiedz

3

Powiedziałbym, że twój problem to typ ExtendedMarker dla drugiego parametru. Przyjmując protokół, klasa obiecuje, że jeśli implementuje opcjonalną metodę mapView:didTapMarker:, drugim parametrem może być GMSMarker lub dowolna jej podklasa.

Twoja metoda nie jest zgodna z umową interfejsu, ponieważ akceptuje tylko instancje ExtendedMarker - która, jak przypuszczam, jest podklasą GMSMarker.

Chciałbym zdefiniować metodę coś takiego. Musisz być przygotowany, aby poradzić sobie z instancjami non ExtendedMarker, ponieważ umowa mówi, że możesz je otrzymać. Po prostu próba wymuszenia rzutowania może spowodować wyjątek.

func mapView(mapView: GMSMapView!, didTapMarker marker: GMSMarker!) -> Bool 
{ 
    // Non specific ExtendedMarker processing 

    if let marker = marker as? ExtendedMarker 
    {  
     // ExtendedMarker specific processing 
    } 
    // More non specific ExtendedMarker processing 
} 
+0

Tak, masz rację, działa w ten sposób! :) Dziękuję Ci bardzo. – andrejbroncek

1

Niestety nie mam pakietu SDK Google iOS pod ręką, ale czy to możliwe, że błąd wynika z parametrów oznaczonych jako wymuszone? Być może odsprzęganie siły nie jest już wymagane (miałem podobny problem z inną metodą podczas migracji do Swift 1.2, więc zgaduję)

+0

Dziękuję za wysiłek, ale to nie pomogło:/ – andrejbroncek

1

Miałem ten sam problem z "didTapInfoWindowOfMarker". Jeśli spróbujesz następujący kod to może pracować dla Ciebie, a także:

func mapView(mapView: GMSMapView!, didTapMarker marker: GMSMarker!) -> Bool { 
    let placeMarker = marker as! ExtendedMarker 
    ... some code ... 
} 

można zrobić to samo z drugim, jak również. Mam nadzieję, że to zadziała dla Ciebie!

+0

Ten działa jak czar, dzięki! :) – andrejbroncek

Powiązane problemy