添加 class 作为通知观察者后未调用方法

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

我有一个 class 叫做 CoreSpotlight(NSObject class),在这个 class 我有需要响应通知的方法。我正在尝试在应用程序委托中创建此 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(我不得不说这也是一个非常糟糕的函数名称),您的代码会更清晰。那么除了在保留变量中实例化 class 的实例之外,您不需要做任何其他事情。