我正在尝试使用此代码,但Xcode返回错误,因为我试图在selector:@selector()
中调用的方法在另一个类中。谢谢你的帮助!
AppDelegate.m:
-(void)applicationDidBecomeActive:(UIApplication *)application{
[..]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethodHere) name:UIApplicationDidBecomeActiveNotification object:nil];
}
MainViewController.m:
-(void)myMethodHere{
[..]
}
答案 0 :(得分:3)
问题是您使用
addObserver:self
表示它在当前类中查找该函数。而是做像
这样的事情addObserver:instanceOfOtherClass
答案 1 :(得分:2)
<强>更新强>
将呼叫添加到init
MainViewController
方法
// 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
中的通知({{ 1}}和init
只是我经常这样做的例子,不一定是每个例子中最好的地方,做你认为有意义的事情。)
答案 2 :(得分:0)
问题在于您的使用 的addObserver:自
观察者需要是一个包含要调用的方法的实例类,因此首先创建该方法,然后添加通知。像。的东西。
-(void)applicationDidBecomeActive:(UIApplication *)application{
[..]
SomeClass *newObject = [[SomeClass alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:newObject selector:@selector(someMethodContainedInSomeclass) name:UIApplicationDidBecomeActiveNotification object:nil];
}