在TabBarViewController类中,我有运行NSTimer的startUpdateNPendingMessagesTimer
方法
我还timerStop
使用invalidate
方法停止此NSTimer
-(void)startUpdateNPendingMessagesTimer {
NSLog(@"Starting UpdateNPendingMessagesTimer");
checkNPendingMessagesTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(onUpdateNPendingMessages:) userInfo:nil repeats:YES];
}
-(void)timerStop
{
[checkNPendingMessagesTimer invalidate];
checkNPendingMessagesTimer = nil;
}
在另一个班级settingsViewController
中,我有一个按钮,实际上必须激活timerStop
方法。
-(IBAction)deconnexion { ....
}
我应该在按钮操作中写什么来激活timerStop
方法?
换句话说,如何从目标C中的另一个类激活方法?
答案 0 :(得分:2)
有很多选择:
我使用block / lambda,因为它干净,高效,比其他解决方案的开销更少,并且节省了打字(是的!)。
答案 1 :(得分:0)
您可以使用通知中心在两个不相关的类之间进行通信。
首先在你的TabBarViewController类的ViewDidLoad中注册一个特定的通知(用“名称”标识),代码如下:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(timerStop)
name:@"aNameOfaNotification"
object:nil];
然后在您的“deconnexion”方法中,您只需发布相同名称的通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"aNameOfaNotification"
object:nil];
每个观察到Notification Name的类都将触发selector:argument中指定的本地方法,在本例中为:timerStop。
如果您不使用ARC,请注意,您可能还需要通过在此类中添加以下代码来取消注册TabBarViewController类:
-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
(您还可以使用:viewWillAppear / viewWillDisappear作为addObserver / removeObserver代码)
Bonne chance!