在将类添加为通知的观察者之后,不会调用方法

时间:2015-11-16 03:22:33

标签: ios nsnotificationcenter nsnotification

我有一个名为CoreSpotlight(NSObject类)的类,在这个类中我有需要响应通知的方法。我尝试在app委托中创建此类的实例,并调用该方法将实例本身添加为观察者。

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()

由于某些原因,这些方法无法响应通知。提前谢谢

1 个答案:

答案 0 :(得分:1)

您正在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 addCoreSpotLightAsObserverForItemInstallerNotifications函数中调用init(我不得不说这是一个非常可怕的函数名),你的代码会更干净。那么除了在保留变量中实例化该类的实例之外,你不需要做任何事情。