簡體   English   中英

在將類添加為通知的觀察者后未調用方法

[英]methods aren't getting called after adding class as observer for notifications

我有一個名為CoreSpotlight(NSObject class)的類,在該類中,我有一些需要響應通知的方法。 我正在嘗試在應用程序委托中創建此類的實例,並且我調用了將該實例本身添加為觀察者的方法。

func addCoreSpotLightAsObserverForItemInstallerNotifications() {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "addNewInstalledItemToSpotlightIndex:", name: "ItemInstallerItemInstalledNotification", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "removeUninstalledItemFromSpotlightIndex:", name: "ItemInstallerItemUninstalledNotification", object: nil)
    NSLog("Corespotlight added as observer///////////////////////////////////////////")
}

這就是我在應用程序didFinishLaunchingWithOptions中的應用程序委托中調用方法的方式

let coreSpotlightInstanceClass = CoreSpotlight()
    coreSpotlightInstanceClass.addCoreSpotLightAsObserverForItemInstallerNotifications()

由於某種原因,這些方法無法響應通知。 先感謝您

您正在創建您的CoreSpotlight實例作為didFinishLaunchingWithOptions函數內部的局部變量,因此,一旦該函數退出,該對象就會被釋放。

您應該創建一個實例屬性來存儲引用。

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    let spotlightHandler = CoreSpotlight()

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        self.spotlightHandler.addCoreSpotLightAsObserverForItemInstallerNotifications()
        return true
    }

盡管如果您只是在CoreSpotlight init函數中調用addCoreSpotLightAsObserverForItemInstallerNotifications (我也必須說這也是一個非常糟糕的函數名),代碼會更干凈。 然后,除了在保留變量中實例化該類的實例外,您無需執行任何其他操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM