![]() |
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". |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Muss ich testen...
Aber nicht ganz, den MKAnnotation = interface(IObjectiveC) Nicht NSObject... Mavarik PS LOL ich habe von 2 unterschiedlichen Autoren 2 unterschiedliche Definitionen... MKAnnotation = interface( NSObject ) Was ist den richtig? |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
MKAnnotation ist ein Protokoll - also für uns "Pascal Menschen" ein Interface.
MKUserLocation ist eine Klasse. Wenigstens da haben sich die ObjC'ler mal an die Wort-Definition gehalten. Also könntest Du auch auf "conformsToProtocol" prüfen. ![]() ![]() ![]() ![]() BTW.. Klickst Du dir gerade alles an Hand der Delphi Doku zusammen oder hast Du einen vorhandenen ObjC Beispiel Code, an dem Du dich lang hangelst? Falls Du irgendwas passendes in ObjC da hast, dann poste das mal. Wenn das ein kurzer Code ist, dann baue ich mir schnell in Oxygene ein Pascal Ponton und poste die .pas hier. Der Übersetzungsschritt von Oxygene zu FireMonkey dürfte dann nicht mehr so schwer sein. |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Zitat:
Also ist mein Interface mit iobjectivC falsch? |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Zitat:
Die Funktion ist also ähnlich supports(). Klick selbst auf den Apple Link! :wink: Zitat:
Da bin ich drüber hinweg ... PS: Was hast Du eigentlich genau vor? Bzw. bist Du sicher, dass nicht schon irgendwo vorher ein Knoten drin ist? ![]() Cocoa will von Dir in dieser Funktion wissen, in welcher Form eine gewisse Annotation in der Karte dargestellt werden soll. Die Annotations musst Du vorher also irgendwo schon mal erstellt haben. Vergib dort, wo du Herr über die erstellten Objekte bist, doch einfach jeder Annotation einen Tag... Dann kannst Du mit Case ganz simpel drauf reagieren..
Delphi-Quellcode:
Schau Dir mal in einer ruhigen Minute
case viewForAnnotation.tag of
0: exit(neue View für MKUserLocation); 1: exit(neue View für MKAnnotation); else exit(nil); // wird eine Standard PIN Nadel end; ![]() Ist Xcode und ObjC, aber Frank erklärt immer sehr detailliert alle Zusammenhänge. Das ist sehr guter Stoff, um zu verstehen, was man wie und wo machen muss, um ans Ziel zu kommen. |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Hi, ich kann mir ja nur denken, was Du am Ende in deinem Projekt machen willst (Die nächsten Anfahrtspunkte anzeigen). Aber zu Betazeiten von XE4 gab es folgenden Blogeintrag den ich auch mal nachgebaut hatte:
![]() Vielleicht hilft es ja |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Besziehungsweise in den nativen Controls gibt es diverse Demos hierfür
![]() |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Zitat:
und leider:
Delphi-Quellcode:
fehlt genau noch diese Function
function TMKMapViewDelegate.mapView( mapView: MKMapView; viewForAnnotation: MKAnnotation ): MKAnnotationView;
{ const AnnotationIdent = 'Annotation'; var pinView: MKPinAnnotationView; P : Pointer; an : MKAnnotation; } begin (* Complete in the next version Mavarik |
AW: ObjectiveC -> XE4 Nachhilfe gesucht...
Frage den doch einfach mal, der ist bei emba im Forum recht aktiv .....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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