2015-04-13 2 views
6

Ich verwende Google Maps iOS SDK in meiner App, alles hat funktioniert bis heute. Ich habe Xcode 6.3 heruntergeladen und ein paar Fehler bekommen. Sortierte alle, mit Ausnahme von zwei Fehlern in meiner MapViewController Klasse, die auf diesen beiden Methoden aufgetaucht:"Objective-C-Methode Konflikte mit optionalen Anforderungsmethode" Fehler nach Update auf XCode 6.3 (Swift 1.2)

erste Methode:

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

mit Fehlern:

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

zweite Methode:

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

mit Fehlern:

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

Ich habe versucht, diese Methoden umschreiben, aber es half nicht. Ich habe auch auf ein Update auf Google Maps SDK überprüft, aber das letzte Update ist von Februar 2015.

Ich wäre dankbar für jeden Hinweis, danke im Voraus! :)

+0

mögliches Duplikat [Compiler Fehler: Methode mit Objective-C-Selektor Konflikten mit früheren Anmeldung mit dem gleichen Objective-C-Selektor] (http://stackoverflow.com/questions/29457720/compiler-error-method- with-objective-c-selector-Konflikte-with-previous-declara) –

Antwort

3

Ich würde sagen, Ihr Problem ist der ExtendedMarker Typ für den zweiten Parameter. Durch die Übernahme des Protokolls verspricht Ihre Klasse, dass der zweite Parameter, wenn er die optionale Methode mapView:didTapMarker: implementiert, eine GMSMarker oder eine Unterklasse davon sein kann.

Ihre Methode erfüllt nicht den Schnittstellenvertrag, da sie nur Instanzen von ExtendedMarker akzeptiert - von denen ich annahm, dass sie eine Unterklasse von GMSMarker ist.

Ich würde die Methode so etwas definieren. Sie müssen darauf vorbereitet sein, mit Nicht-ExtendedMarker-Instanzen umzugehen, die weitergegeben werden, weil der Vertrag besagt, dass Sie diese erhalten könnten. Wenn Sie nur versuchen, den Cast zu erzwingen, kann dies zu einer Ausnahme führen.

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

Ja, du hast Recht, es funktioniert so! :) Vielen Dank. – andrejbroncek

1

Leider habe ich nicht das Google iOS SDK zur Hand, aber könnte es sein, dass der Fehler wegen der Parameter als Force-unwrapped markiert ist? Vielleicht ist das force-unwrap nicht mehr erforderlich (ich hatte ein ähnliches Problem mit einer anderen Methode bei der Migration zu Swift 1.2, also rate einfach)

+0

Vielen Dank für Ihre Mühe, aber es hat nicht geholfen:/ – andrejbroncek

1

Ich hatte das gleiche Problem mit 'didTapInfoWindowOfMarker'. Wenn Sie den folgenden Code versuchen, es könnte auch für Sie arbeiten:

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

Sie auch das gleiche mit dem anderen zu tun. Ich hoffe, es wird für Sie arbeiten!

+0

Dies funktioniert wie ein Zauber, danke! :) – andrejbroncek

Verwandte Themen