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 der canDragRowsWithIndexes:atPoint Selektor aufgerufen, setpointwobei 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):

  1. 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.
  2. 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.
  3. Sie können die Xamarin.Mac-API-Onlinedokumentation verwenden.

  4. 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.