这是我的( C#)代码:(player是一个AVPlayer)。
var v = NSNotificationCenter.DefaultCenter.AddObserver(new NSString("Status"), ReadyNow, player.CurrentItem);它从来不叫ReadyNow(NSNotification obj),即使球员打得很好。
如何修复它以调用该方法?(我不知道错误是在Xamarin/C#部分中,还是在我使用的对象中等等,如果用Swift编写,这将是相同的错误。)
发布于 2020-05-20 19:41:07
您可以获得玩家的当前项目并将观察者添加到其中。
财产:
private AVPlayerItem CurrentItem => Player.CurrentItem;观察员:
CurrentItem.AddObserver(this, new NSString("status"),
NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Initial,
StatusObservationContext.Handle);如果需要,还可以附加loadedTimeRanges
CurrentItem.AddObserver(this, new NSString("loadedTimeRanges"),
NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New,
LoadedTimeRangesObservationContext.Handle);注:在附加之前,始终要确保分离该状态的观察者:
CurrentItem.RemoveObserver(this, new NSString("status"));编辑:StatusObservationContext只是一个属性,指向status字符串。
public static readonly NSString StatusObservationContext = new NSString("Status");有用的资源,您可以在Martinj的优秀包- XamarinMediaManager中找到您的XamarinMediaManager实现所需要的一切。
资料来源:
发布于 2019-09-05 20:44:42
您正在尝试观察当前保存在AVPlayerItem属性中的单个CurrentItem实例,即使它当前为null。
您可以在AVPlayer实例上观察,并使用希望在其上观察更改的NSObject的keyPath:
示例:
obs = player.AddObserver("currentItem", NSKeyValueObservingOptions.New, (NSObservedChange obj) =>
{
Console.WriteLine($"{obj.NewValue}");
});注:请持有参考文献。返回到返回的IDisposable,否则您的观察者可能会超出作用域并被选中,否则会泄漏mem。
https://stackoverflow.com/questions/57810910
复制相似问题