Xamarin.iOS MPMediaItem.AssetURL is always null

本文关键字:always null is AssetURL iOS MPMediaItem Xamarin | 更新日期: 2023-09-27 18:27:28

在Xamarin.iOS中,MPMediaItem.AssetURL总是为任何项目返回null。我研究了一下,然后尝试使用Objective-C句柄。所以我用了

NSUrl url = new NSUrl(item.ValueForProperty(MPMediaItem.AssetURLProperty).Handle);     

上面的代码试图获得AssetURL属性的objective-c句柄,然后将其转换为托管表示。它有效!

因此,我决定研究mono的实现。Mono已将其实现为-

return this.ValueForProperty (MPMediaItem.AssetURLProperty) as NSUrl;

我手动尝试过,但它实际上返回了null。所以,这意味着Xamarin的实现是错误的。然而,有一件事让我很困惑。在我运行了正确的代码(第一个片段)后,第二个片段不会返回null,而是返回正确的值。我的第一个片段有什么可能改变第二个片段的行为?

Xamarin.iOS MPMediaItem.AssetURL is always null

听起来从ValueForProperty返回的句柄不是NSUrl,而as强制转换使其成为null(例如,它可能是内部/私有类型)。

我的第一个片段可能做了什么来改变第二个片段的行为?

很简单。您使用此特定句柄值创建了一个NSUrl。如果您再次尝试获取它,则会返回相同的实例(除非它是垃圾收集的),因此我们有一个表示单个本地实例的单个托管实例。