我正在尝试使用此代码,但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

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