В целом, использование NSArray не очень полезно, потому что вы сталкиваетесь с проблемами, которые вы описали выше.
Вот почему в целом вы должны преобразовать NSArray в строго типизированный массив.Низкоуровневая среда выполнения MonoMac делает это для всех обратных вызовов уже от вашего имени.
Обычно вы делаете это:
YourType [] stronglyTyped = NSArray.ArrayFromHandle<YourType> (arrayIntPtrHandle);
Обратите внимание, что NSArray может хранить только NSObjects, поэтому для "YourType" необходимобыть объектом, полученным из NSObject.
Теперь, если вы все еще хотите использовать NSArray, вам нужно помнить, что ValueAt возвращает базовый дескриптор объекта (IntPtr), чтобы использовать его с C #, вам нужно преобразовать его в NSObject.Вы делаете это с помощью метода Runtime.GetNSObject, вы можете привести результат к наиболее производному типу:
YourType x = (YourType) Runtime.GetNSObject (NSArray.ValueAt (0));
При этом, если вы используете инструменты привязки API для доступа к Objective-C API,Вы не связываете вещи правильно.У вашего контрактного API вместо NSArray должна быть строго типизированная версия, поэтому:
[Export ("getElements")]
NSArray GetElements ();
Должно стать:
[Export ("getElements")]
YourType [] GetElements ();