![]() |
ObjectiveC -> XE4 Nachhilfe gesucht...
Hallo Zusammen!
Ich beschäftige mich gerade mit dem MapKit... Hier ist die Definition:
Delphi-Quellcode:
function TMyDelegate.mapView(mapView: MKMapView;viewForAnnotation: MKAnnotation): MKAnnotationView;
Dieser Delegate function wird von iOS aber mit zwei verschiedene Typen übergeben... einmal
Delphi-Quellcode:
und
MKUserLocation = interface(NSObject)
Delphi-Quellcode:
MKAnnotation = interface(IObjectiveC)
Innerhalb der o.g. Function muss nun abgetestet werden, nach welchem der beiden Interfaceobjecten gefragt ist... Leider läßt sich
Delphi-Quellcode:
nicht kompilieren...
if viewForAnnotation is MKUserLocation then // <- Compilerfehler
begin result := NIL; exit; end; Wie muss man das schreiben? Grüsse Mavarik |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Was kommt denn für ein Compilerfehler?
Geht folgendes?
Delphi-Quellcode:
if Supports(viewForAnnotation, MKUserLocation) then
begin result := NIL; exit; end; |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Zitat:
|
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
|
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Supports überprüft, ob ein Objekt ein Interface implementiert, man müsste also die Instanz noch mit angeben.
Delphi-Quellcode:
if Supports( <Instanz>, viewForAnnotation, MKUserLocation) then
|
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Ich bin gerade noch unterwegs und kann nicht nachschauen.
Ins Blaue getippt würde ich sagen, dass es eine Instanzmethode Names "performsToSelector" geben müsste. Diese Methode gibt True (YES) zurück, wenn das Objekt eine bestimmte Methode unterstützt. Sorry, geht gerade nicht genauer. Ich schaue nochmal nach, wenn ich zurück bin. |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Zitat:
Delphi-Quellcode:
Siehe emba wiki link von Daniel!
function Supports(const Instance: IInterface; const IID: TGUID): Boolean;
function Supports(const Instance: TObject; const IID: TGUID): Boolean; function Supports(const AClass: TClass; const IID: TGUID): Boolean; viewForAnnotation scheint ja schon die Instanzvariable zu sein?! |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Ich kannte nur die Versionen mit Klasse oder Instanz.
Daniels Antwort wurde bei mir unterschlagen, sonst hätte ich es (vielleicht) selber gesehen ;) |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Danke... Drecks Hilfe, hat Supports nicht gefunden...
Compilieren läßt es sich, funktioniert aber nicht... Noch ne Idee? Mavarik |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Die Klasse "MKAnnotation" hat eine Methode namens "setCoordinate".
Die Klasse "MKUserLocation" ist eine Subclass von "MKAnnotation". Sie kann die Methode "setCoordinate" der Basisklasse nutzen, hat aber selbst keine Methode "setCoordinate" deklariert. Die NSObject Klassenmethode "respondsToSelector" prüft, ob eine Klasse eine bestimmte Methode unterstützt (ohne dabei durch die Vererbung zu wandern). Dein "viewForAnnotation" ist von NSObject abgeleitet, kennt also die Methode "respondsToSelector". Du brauchst also einfach nur zu prüfen, ob
Code:
True oder False zurückgibt.
viewForAnnotation.respondsToSelector(selector(setCoordinate:))
Die Funktion Selector() liegt im Cocoa Foundation Framework. Wenn True, dann "MKAnnotation" sonst "MKUserLocation". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz