[[NSNotificationCenter defaultCenter]addObserver: selector:@selector(mymethod) name: object:];在 IOS

Posted

技术标签:

【中文标题】[[NSNotificationCenter defaultCenter]addObserver: selector:@selector(mymethod) name: object:];在 IOS 9 中不再调用【英文标题】:[[NSNotificationCenter defaultCenter]addObserver: selector:@selector(mymethod) name: object:]; no longer gets called in IOS 9 【发布时间】:2015-09-17 16:38:23 【问题描述】:

ios 9 之前,我的 ViewController 类包括 NSNotificationCenter 观察者,并且正确调用了 @selector() 方法(代码如下所示)。 但是从 iOS 9 开始,这些方法不再被调用。有没有人有同样的问题?我需要知道是否有解决方案,或者我需要从 AppDelegate 类对我的 viewController 进行委托调用。先感谢您。

请注意,我在 viewWillAppear 中有那些,在 viewWillDisappear 中有 removeObserver。

我查看了苹果文档https://developer.apple.com/library/prerelease/mac/releasenotes/Foundation/RN-Foundation/index.html#//apple_ref/doc/uid/TP30000742 它指出我们不再需要删除弱链接通知的观察者,所以我从 viewWillDisappear 中删除了“removeObserver”。

 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationDidEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnteringForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecameActive) name:UIApplicationDidBecomeActiveNotification object:nil];

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationResignedActive) name:UIApplicationWillResignActiveNotification object:nil];

【问题讨论】:

有些人报告说延迟可能会有所帮助。可能是这样的: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationDidEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; ); 【参考方案1】:

有些人报告说延迟可能会有所帮助。可能是这样的:dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationDidEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; );

【讨论】:

我确实使用了你的建议并且它有效!谢谢,你为我节省了很多时间。 是的,从主队列发布通知修复了错误。它仅适用于 iOS 9。我想我们会经常看到这个错误。今天让我头疼:\

以上是关于[[NSNotificationCenter defaultCenter]addObserver: selector:@selector(mymethod) name: object:];在 IOS 的主要内容,如果未能解决你的问题,请参考以下文章

WiFi网络更改是不是有NSNotificationCenter通知?

NSNotificationCenter传值

消息通信机制NSNotificationCenter -备

NSNotificationCenter 内存泄漏

如何在 iOS 8 中使用带有 NSNotificationCenter 的小部件

关闭时未收到 NSNotificationCenter 通知