Xamarin.ios &引用;“过时”;尝试侦听通知时发出警告,以及如何停止观察?

Xamarin.ios &引用;“过时”;尝试侦听通知时发出警告,以及如何停止观察?,xamarin.ios,Xamarin.ios,我有一个助手方法,可以加密iPhone上的一些数据。如果操作因设备锁定而中断,我想删除刚刚处理的文件。因此,如果调用该方法,我将添加notifiaction listsner 两个问题: 1.我得到一个警告,我用来添加侦听器的方法已经过时。否则我怎么做呢? 2.如果处理完成了,我想摆脱监听器——但如何摆脱呢 private static foo(string sDestPathAndFile) { NSNotificationCenter.DefaultCenter.AddObserver

我有一个助手方法,可以加密iPhone上的一些数据。如果操作因设备锁定而中断,我想删除刚刚处理的文件。因此,如果调用该方法,我将添加notifiaction listsner

两个问题: 1.我得到一个警告,我用来添加侦听器的方法已经过时。否则我怎么做呢? 2.如果处理完成了,我想摆脱监听器——但如何摆脱呢

private static foo(string sDestPathAndFile)
{
  NSNotificationCenter.DefaultCenter.AddObserver ( "UIApplicationProtectedDataWillBecomeUnavailable", 
  delegate( NSNotification oNotification )
  {
    Util.DeleteFile ( sDestPathAndFile );
    throw new InvalidOperationException ( "Protected data became unavailable - device locked?" );
  } );

  // Do some processing here.
  // ...
  // Now get rid of the notification listener - but how?
}

要消除过时的警告,应使用以下命令:

NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.ProtectedDataWillBecomeUnavailable, Handler);
这适用于所有观察员,例如:

UIKeyboard.WillHideNotification
UIKeyboard.WillShowNotification
UIDevice.OrientationDidChangeNotification
等等。这些是
NSNotificationCenter
期望的适当的
NSString

至于如何摆脱它,我无法直接验证,因为我目前无法做到这一点,但一种可能的方法是:

将addobserver声明为NSObject,然后使用
NSNotificationCenter.DefaultCenter.RemoveObserver
将其删除:

NSObject obj = NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.ProtectedDataWillBecomeUnavailable, handler);

// do whatever you need to do
// time to remove:
NSNotificationCenter.DefaultCenter.RemoveObserver(obj);