我想在我的AppDelegate.m中从此方法发送NSNotification
(当点击UIButton
时):
- (void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0){
//cancel clicked ...do your action
// HERE
}
}
..并在我UIViewControllers
之一收到。我怎么能这样做?
编辑更多信息:我正在制作闹钟应用,当用户按下UIButton
时,我想停止闹钟。我认为NSNotifications
是从AppDelegate.m文件获取信息到ViewController.m文件的唯一方法吗?
答案 0 :(得分:5)
您应该注册接收者对象以接受从通知中心发送的一些消息。
假设您有Obj A控制您的警报,值“stopAlarm”是可以停止警报的消息。您应该为“stopAlarm”消息创建一个观察者。
你可以这样做:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(controller:)
name:@"stopAlarm"
object:nil];
现在,您应该创建一个管理此消息的方法控制器:
- (void)controller:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"stopAlarm"]){
//Perform stop alarm with A object
}
}
最后,您可以在代码中发送消息“stopAlarm”:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"stopAlarm"
object:nil];
我希望这可能有所帮助。
编辑:
卸载UIViewController或应用程序终止时,您应该调用:
[[NSNotificationCenter defaultCenter] removeObserver:self];
停止观察。 就是这样。
感谢热门修正。
答案 1 :(得分:0)
如果只有一个警报来管理计时器,您可能想要创建一个类 - 甚至可能是一个单例。这样您就可以从应用程序中的任何位置进行管理,而不是在视图控制器中进行管理看看:
http://dadabeatnik.wordpress.com/2013/07/28/objective-c-singletons-an-alternative-pattern/
和
正如Hot Licks所提到的,你真的不想在不知道发生了什么的情况下跳进去。希望这些链接能帮助您朝着正确的方向前进。