我正在尝试使用此代码,但Xcode返回错误,因为我尝试在selector:@selector()调用的方法selector:@selector()在另一个类中。 谢谢你的帮助!

AppDelegate.m:

-(void)applicationDidBecomeActive:(UIApplication *)application{
 [..]
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethodHere) name:UIApplicationDidBecomeActiveNotification object:nil];
}

MainViewController.m:

-(void)myMethodHere{
    [..]
}

===============>>#1 票数:3

问题是您使用

addObserver:self

这意味着它将在当前类中查找该函数。 而是做类似的事情

addObserver:instanceOfOtherClass

===============>>#2 票数:2 已采纳

更新
将调用添加到MainViewControllerinit方法中

// MainViewController.m
- (id)init;
{
  self = [super init];
  if (self) {

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

  }
  return self;
}

确保在dealloc删除自己

- (void)dealloc;
{
  [[NSNotificationCenter defaultCenter] removeObserver:self];
  [super dealloc];
}

通过这种方式,从对象进入存在的那一刻起,它就准备好接收通知,然后当它被释放时,它将安全地删除自己。


遵循的一个好的模式是使正在执行观察的类负责注册通知。 这样可以很好地保持封装,并消除了将通知发送到已释放实例的风险。

合理
您需要平衡用于注册通知和取消注册通知的调用,否则可能会在已释放的对象上调用消息,这可能很难追踪。

如果我有一个需要通知事件的类,可能的隐患是我将在init方法中注册通知,然后在dealloc注销该通知( initdealloc只是我经常这样做的例子,不一定是每个示例中的最佳位置,都应根据您的情况做些有意义的事情)。

===============>>#3 票数:0

问题是您对addObserver:self的使用

观察者必须是包含要调用的方法的实例类,因此请先创建该实例,然后添加通知。 就像是。

-(void)applicationDidBecomeActive:(UIApplication *)application{
[..]
SomeClass *newObject = [[SomeClass alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver:newObject selector:@selector(someMethodContainedInSomeclass) name:UIApplicationDidBecomeActiveNotification object:nil];
}

  ask by Netnyke translate from so

未解决问题?本站智能推荐:

1回复

NSNotificationCenter-未调用观察者选择器

我从调用多个NSNotifications的所有观察器选择器到没有一个起作用。 是否存在我可能已禁用的XCode / Application设置,可能导​​致此行为? 这个问题几乎影响到我已经注册为观察员的每个班级。 几天前一切正常。 我主要在viewDidLoad中设置观察者,并在
3回复

在iOS 5 ARC中删除NSNotificationCenter观察器

我有一个基于iOS 5 ARC的项目,并且我很难在哪里删除我在UIViewController注册的NSNotificationCenter观察的观察者。 关于SO的类似帖子已经说过这应该在-dealloc方法中完成。 尽管ARC项目中不需要此方法,但我已使用以下代码添加它: 作为测
1回复

NSNotificationCenter调用两次

以下是我所拥有的。 MainViewController.m NotificationListener.m 现在,当我单击MainViewController中的侧面菜单按钮时,我期望的是从NotificationListener调用一次AdjustShowMenu,但是它
2回复

NSNotification侦听器iOS

我们被要求实现一项功能,以监听通知并决定是否应显示该通知。 甚至在它们出现在屏幕上之前(NSNotificationCenter或顶部的警报/横幅)。 我们必须为用户设置一个静默时间,并检查通知是否从服务器广播,如果在该静默时间内触发通知,iOS设备将不会显示该通知。
1回复

在dealloc之前观察并删除类别中的NSNotification

我目前正在观察一个类别中对象的整个生命周期的通知。 但是,我正在调动dealloc方法以获得删除观察的位置。 这感觉不好,我对它感到不舒服,另外我遇到了问题。 有没有人有任何想法如何在一个类别中取消分配对象之前停止观察通知?
1回复

NSNotificationCenter选择器参数

我不仅要调用NSNotification中的方法,还要调用方法的参数 而不仅仅是 只是用于 但这是行不通的。 有任何想法吗?
2回复

将另一个选择器/名称对添加到NSNotificationCenter中的现有观察者

我不确定确切的原因(除了下面描述的歧义),但我读到不应将多个观察者添加到同一对象的NSNotificationCenter中。 但是,我想在通知中心的同一对象中添加第二个选择器/名称对。 我添加了第一个,如下所示: 选项1: 要添加第二个(如下所示) ,似乎会再次向通知中
2回复

NSNotificationCenter选择器应带有还是不带有NSNotification对象

我正在做一些代码清理,并且想知道是否有关于下面哪种选择更可取的官方或非正式标准。 基本问题是我必须执行一些视图更改逻辑。 无论在awakeFromNib中还是在收到通知时,都应调用此代码。 为了避免两次编写相同的代码,最好使用以下选项。
2回复

从多个文件调用选择器

在AppDelegate.m中,我定义了 我想从allerta.h调用alerticonstatus: allerta.m: 我可以从另一个文件(如allerta.h)中导入@selector函数吗? 现在我有SIGABRT错误。 你能帮助我吗? 谢谢。
2回复

Swift-无法识别的选择器已发送至实例

我在Swift项目中设置了一个简单的NSNotification 。 我也尝试过... 调用的方法看起来像这样。 发出通知后,我收到以下错误。 有什么问题,我该如何解决?