API de macOS para desarrolladores de Xamarin.Mac

Información general

Durante gran parte del tiempo que dedica a desarrollar con Xamarin.Mac, puede pensar, leer y escribir en C# sin preocuparse demasiado por las API subyacentes Objective-C. Sin embargo, a veces tendrá que leer la documentación de la API de Apple, traducir una respuesta de Stack Overflow a una solución para el problema o comparar con un ejemplo existente.

Nociones básicas de Objective-C

A veces, será necesario leer una definición o una llamada de método de Objective-C y traducirla al método de C# equivalente. Echemos un vistazo a una definición de función de Objective-C y analicemos sus partes. Este método (un selector en Objective-C) se puede encontrar en NSTableView:

- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint

La declaración se puede leer de izquierda a derecha:

  • El prefijo - significa que es un método de instancia (no estático). + significa que es un método de clase (estático)
  • (BOOL) es el tipo de valor devuelto (booleano en C#)
  • canDragRowsWithIndexes es la primera parte del nombre.
  • (NSIndexSet *)rowIndexes es el primer parámetro y con su tipo. El primer parámetro tiene el formato: (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint es el segundo parámetro y su tipo. Cada parámetro después del primero es el formato: selectorPart:(Type) paramName
  • El nombre completo de este selector de mensajes es: canDragRowsWithIndexes:atPoint:. Tenga en cuenta el símbolo : al final; es importante.
  • El enlace real de C# de Xamarin.Mac es: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Esta invocación del selector se puede leer de la misma manera:

[v canDragRowsWithIndexes:set atPoint:point];
  • La instancia v tiene el selector canDragRowsWithIndexes:atPoint al que se llama con dos parámetros, set y point, pasados.
  • En C#, la invocación del método tiene este aspecto: v.CanDragRows (set, point);

Búsqueda del miembro de C# para un selector determinado

Ahora que ha encontrado el selector de Objective-C que necesita invocar, el paso siguiente es asignarlo al miembro de C# equivalente. Hay cuatro enfoques que puede probar (siguiendo con el ejemplo NSTableView CanDragRows):

  1. Use la lista de finalización automática para buscar rápidamente algo del mismo nombre. Como sabemos que es una instancia de NSTableView puede escribir:

    • NSTableView x;
    • x. [ctrl+espacio si la lista no aparece).
    • CanDrag [entrar]
    • Haga clic con el botón derecho en el método, vaya a la declaración para abrir el Explorador de ensamblados, donde puede comparar el atributo Export con el selector en cuestión
  2. Busque en todo el enlace de clase. Como sabemos que es una instancia de NSTableView puede escribir:

    • NSTableView x;
    • Haga clic con el botón derecho en NSTableView, vaya a la declaración al Explorador de ensamblados
    • Buscar el selector en cuestión
  3. Puede usar la documentación en línea de la API de Xamarin.Mac.

  4. Miguel proporciona una vista de "Rosetta Stone" de las API de Xamarin.Mac aquí en la que puede buscar una API determinada. Si la API no es específica de AppKit o macOS, puede encontrarla allí.