我有一个名为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()
由于某些原因,这些方法无法响应通知。提前谢谢
答案 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
(我不得不说这是一个非常可怕的函数名),你的代码会更干净。那么除了在保留变量中实例化该类的实例之外,你不需要做任何事情。