在Xamarin.iOS中,MPMediaItem.AssetURL始终为任何项返回null。我研究了一下,然后尝试使用Objective-C句柄。所以我用了
NSUrl url = new NSUrl(item.ValueForProperty(MPMediaItem.AssetURLProperty).Handle);
上面的代码尝试获取AssetURL属性的objective-c句柄,然后将其转换为Managed表示。它有效!
所以,我决定研究单声道实现。 Mono将其实现为 -
return this.ValueForProperty (MPMediaItem.AssetURLProperty) as NSUrl;
我手动尝试了这个,它实际上是返回null。所以,这意味着Xamarin的实现是错误的。然而,有一件事让我感到困惑。在我运行正确的代码(第一个代码段)后,第二个剪辑不会返回null,而是正确的值。我的第一个片段可以改变第二个片段的行为有什么可能?
答案 0 :(得分:0)
听起来ValueForProperty
返回的句柄不是NSUrl
而as
强制转换为null
(例如,它可能是内部/私有类型)。
我的第一个片段可能会改变第二个片段的行为?
简单。您使用此特定句柄值创建了NSUrl
。如果您尝试再次获取它,将返回相同的实例(除非它被垃圾收集),因此我们有一个托管实例代表一个本机实例。