2011-02-03 70 views
2

我有一個輔助方法,它可以加密iPhone上的一些數據。如果操作因設備被鎖定而中斷,我想刪除剛處理的文件。因此,如果調用該方法,我添加一個通知列表器。嘗試聆聽NSNotification時如何停止觀察?「Obsolete」警告?

兩個問題: 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? 
} 

回答

2

爲了擺脫過時的警告,你應該使用下列內容:

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); 
+0

謝謝,這工作(兩個!)。 – Krumelur 2011-02-03 10:49:34