macOS-APIs für Xamarin.Mac-Entwickler
Übersicht
Während der Entwicklung mit Xamarin.Mac können Sie in C# ohne große Probleme mit den zugrunde liegenden Objective-C APIs denken, lesen und schreiben. Manchmal müssen Sie jedoch die API-Dokumentation von Apple lesen, eine Antwort von Stack Overflow in eine Lösung für Ihr Problem übersetzen oder mit einem vorhandenen Beispiel vergleichen.
Lesen genug Objective-C , um gefährlich zu sein
Manchmal ist es erforderlich, eine Definition oder einen Objective-C Methodenaufruf zu lesen und in die entsprechende C#-Methode zu übersetzen. Sehen wir uns eine Objective-C Funktionsdefinition an und teilen die Teile auf. Diese Methode (ein Selektor in Objective-C) finden Sie unter NSTableView
:
- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint
Die Deklaration kann von links nach rechts gelesen werden:
- Das
-
Präfix bedeutet, dass es sich um eine instance (nicht statische) Methode handelt. + bedeutet, dass es sich um eine (statische) Klassenmethode handelt. (BOOL)
ist der Rückgabetyp (bool in C#)canDragRowsWithIndexes
ist der erste Teil des Namens.(NSIndexSet *)rowIndexes
ist der erste Param und mit dem Typ . Der erste Parameter hat das folgende Format:(Type) paramName
atPoint:(NSPoint)mouseDownPoint
ist der zweite Param und sein Typ. Jeder Parameter nach dem ersten hat das Format:selectorPart:(Type) paramName
- Der vollständige Name dieser Nachrichtenauswahl lautet:
canDragRowsWithIndexes:atPoint:
. Notieren Sie sich den:
am Ende - es ist wichtig. - Die tatsächliche Xamarin.Mac C#-Bindung ist:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
Dieser Selektoraufruf kann auf die gleiche Weise gelesen werden:
[v canDragRowsWithIndexes:set atPoint:point];
- Für die instance
v
wird dercanDragRowsWithIndexes:atPoint
Selektor aufgerufen,set
point
wobei zwei Parameter und übergeben werden. - In C# sieht der Methodenaufruf wie folgt aus:
v.CanDragRows (set, point);
Suchen des C#-Elements für einen bestimmten Selektor
Nachdem Sie nun den Selektor gefunden haben, den Objective-C Sie aufrufen müssen, besteht der nächste Schritt darin, diese dem entsprechenden C#-Element zuzuordnen. Es gibt vier Ansätze, die Sie ausprobieren können (weiter mit dem NSTableView CanDragRows
Beispiel):
Verwenden Sie die Liste der automatischen Vervollständigung, um schnell nach etwas mit demselben Namen zu suchen. Da wir wissen, dass es sich um eine instance sie
NSTableView
eingeben können:NSTableView x;
x.
[STRG+LEERZEICHEN, wenn die Liste nicht angezeigt wird).CanDrag
[enter]- Klicken Sie mit der rechten Maustaste auf die Methode, wechseln Sie zur Deklaration, um den Assemblybrowser zu öffnen, in dem Sie das
Export
Attribut mit dem betreffenden Selektor vergleichen können.
Durchsuchen Sie die gesamte Klassenbindung. Da wir wissen, dass es sich um eine instance sie
NSTableView
eingeben können:NSTableView x;
- Klicken Sie mit der rechten Maustaste auf
NSTableView
, wechseln Sie zu Deklaration im Assemblybrowser. - Suchen Sie nach dem betreffenden Selektor.
Sie können die Xamarin.Mac-API-Onlinedokumentation verwenden.
Miguel bietet hier eine "Rosetta Stone"-Ansicht der Xamarin.Mac-APIs, die Sie nach einer bestimmten API durchsuchen können. Wenn Ihre API nicht AppKit- oder macOS-spezifisch ist, finden Sie sie möglicherweise dort.