尝试收听NSNotification以及如何停止观察时出现“过时”警告?

时间:2011-02-03 10:14:07

标签: xamarin.ios

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

两个问题: 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?
}

1 个答案:

答案 0 :(得分:2)

要删除过时的警告,您应该使用以下内容:

NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.ProtectedDataWillBecomeUnavailable, Handler);

这适用于所有观察者,例如:

UIKeyboard.WillHideNotification
UIKeyboard.WillShowNotification
UIDevice.OrientationDidChangeNotification

等等。这些是NSString期待的适当NSNotificationCenter

至于摆脱它,我无法亲自验证,因为我目前无法这样做,但一种可能的方法是:

将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);