Мне нужно использовать свойство loadTimeRanges класса AVPlayerItem, чтобы узнать, какая часть файла была загружена. К сожалению, это свойство недоступно в MonoTouch.
В справочнике MonoTouch Rosetta Stone метод присутствует, но прокомментирован:
Селектор: loadTimeRanges
Свойство: // NSArray loadTimeRanges { get; }
Кто-нибудь знает, будет ли этот метод добавлен в будущем?
Тем временем я попытался сопоставить селектор target-c в соответствии с xamarin doc< /а>
Я определил отсутствующий селектор:
[System.Runtime.InteropServices.DllImport(MonoTouch.Constants.ObjectiveCLibrary, EntryPoint="objc_msgSend")]
static extern NSArray nsarray_objc_msgSend (
IntPtr target, IntPtr selector);
И после этого вызывал метод так:
/* Call loadedTimeRanges selector on AVPlayerItem */
AVPlayerItem target = m_playerItem;
MonoTouch.ObjCRuntime.Selector selector = new MonoTouch.ObjCRuntime.Selector ("loadedTimeRanges");
NSArray loadedTimeRanges = nsarray_objc_msgSend(target.Handle, selector.Handle);
/* Convert the returned value as CMTimeRange */
IntPtr intPtr = loadedTimeRanges.ValueAt(0);
System.Runtime.InteropServices.GCHandle handle = System.Runtime.InteropServices.GCHandle.FromIntPtr(intPtr);
NSValue v = (NSValue)handle.Target;
MonoTouch.CoreMedia.CMTimeRange timeRange = v.CMTimeRangeValue;
Но при вызове моего селектора я получаю следующую ошибку:
Unhandled Exception: System.Runtime.InteropServices.MarshalDirectiveException: Type MonoTouch.Foundation.NSObject which is passed to unmanaged code must have a StructLayout attribute.
Кто-то знает, что мне не хватает? Заранее спасибо!