添加 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 的实例之外,您不需要做任何其他事情。
我有一个 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 的实例之外,您不需要做任何其他事情。