Desde el documentation en NSArray
:
NSArray es “puenteado de teléfono gratuito "Con su contraparte de Core Foundation, CFArray Reference. Lo que esto significa es que el tipo de Fundación básica es intercambiable en llamadas de función o método con el objeto de base puenteado , siempre que envíe un tipo al otro. Por lo tanto, en una API donde vea un parámetro NSArray *, puede pasar un CFArrayRef, y en una API donde vea un parámetro CFArrayRef , puede pasar una instancia de NSArray. Esta disposición también se aplica a sus subclases concretas de NSArray.
Así que el problema debe ser con los dos métodos que se llaman. Una vez más, desde la documentación, CGWindowListCopyWindowInfo
tiene valor de retorno:
una matriz de tipos CFDictionaryRef, cada uno de los cuales contiene información acerca una de las ventanas de la sesión del usuario actual. Si no hay ventanas que coincidan con los criterios deseados, la función devuelve una matriz vacía. Si llama a esta función desde fuera de una sesión de seguridad de GUI o cuando no se está ejecutando ningún servidor de ventana, esta función devuelve NULL.
y CGWindowListCreate
tiene valor de retorno:
Matriz de valores CGWindowID correspondiente a las ventanas deseadas. Si no hay ventanas que coincidan con los criterios deseados, la función devuelve una matriz vacía. Si llama a esta función desde fuera de una sesión de seguridad de GUI o cuando no se está ejecutando ningún servidor de ventana, esta función devuelve NULL.
Cuando se llama a NSLog(@"%@",array);
, el mensaje description
se envía a cada objeto de la matriz. Flotantes, BOOL y entradas no responden a este mensaje. Por ejemplo, obtendrá un error de
NSLog(@"Printing 2: %@",2);
pero el error desaparece si se utiliza el int
llamada:
NSLog(@"Printing 2: %d",2);
Para su caso, CGWindowListCreate
está volviendo una serie de CGWindowID
valores, y estos son enteros sin signo de 32 bits. Por lo tanto, no responden a %@
, pero responderán a %u
. Por lo tanto, la solución es imprimir el arreglo manualmente usando %u
.
¡Ah! Ahora eso tiene sentido en cuanto a por qué se comportaba como una matriz C y la mitad como un objeto. Gracias por la respuesta. –