Tag: nsnotifications

应用程序终止后,使用NSNotification在UIViewController中处理UILocalNotification

我正在使用UILocalNotification ,我想通知我的控制器之一,即使应用程序已被终止,通知已收到。 在我的appDelegate中,我实现了这个function: -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { if ([application applicationState] == UIApplicationStateInactive) { [[NSNotificationCenter defaultCenter] postNotificationName:@"localNotificationReceived" object:notification.userInfo]; } } 在我的UIViewController我在viewDidLoad方法上实现了观察者 – (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didlocalNotificationReceived:) name:@"localNotificationReceived" object:nil]; } 它运行在后台运行的应用程序完美。 由于viewDidLoad方法已经被调用,Observer正在等待.. 问题是当我杀了应用程序。 然后,我的控制器的观察者不见了, didlocalNotificationReceived方法从不被调用。 我认为这是因为当我收到localNotification并再次运行应用程序。 didReceiveLocalNotification:方法在我的UIViewController的viewDidLoad之前调用。 然后在PostNotificationName之后创build观察者,然后观察者不收到任何东西。 我想知道是否有一些最佳实践或模式来处理这类问题。 我知道didFinishLaunchingWithOptions方法是在didlocalNotificationReceived之前didlocalNotificationReceived因此可能有些事情要做。 更新: 我也发现,当应用程序被终止。 一旦你点击通知,它打开应用程序,调用函数didFinishLaunchingWithOptions但从来没有调用didReceiveLocalNotification 。 所以我认为我会处理两种情况。

在AVQueuePlayer中检测当前项目并知道它何时更改?

我目前有一个AVQueuePlayer按顺序播放几个.aif文件。 当它通过每个audio时,我想要执行与特定声音相关的操作(例如,更改imageview的uiimage)。 我的问题是正确设置NSNotification。 我已经设置它通知我,当队列完成最后一个对象,但我无法收到每个当前项目的通知。 这是我有什么: //Setting Up My Queue List yellowVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/YellowVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; orangeVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/OrangeVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; redVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/RedVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; pinkVoice = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/PinkVoice.aif", [[NSBundle mainBundle] resourcePath]]]]; NSArray *soundEmotions = [NSArray arrayWithObjects:yellowVoice, […]

是否有可能在目标c中打开正在运行的后台应用程序

从后台打开我的应用程序运行在一个特定的时间.. 想要做这样的事情 – (void)applicationDidEnterBackground:(UIApplication *)application { timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; } – (void)timerFired:(NSTimer*)timer { NSLog( @"yes it is running…"); PickUpCallViewController *call=[[PickUpCallViewController alloc]initWithNibName:@"PickUpCallViewController" bundle:nil]; navi=[[UINavigationController alloc]initWithRootViewController:call]; [[navi navigationController] setNavigationBarHidden:YES animated:YES]; window.rootViewController = navi; [window makeKeyAndVisible]; }

如果显示UIAlertView,是否在iOS上有通知?

想知道是否有通知可用,如果UIAlertViewpopup? 背景:我的应用程序在一段时间不活动后要求用户inputPIN码,但是如果屏幕上出现提示,我想阻止它。 我不想通过我的代码,并find所有警报和禁用PIN检查,而不是通知将是真棒。 NSNotification任何希望?

警告iOS / iPhone用户有关重复的NSNotification观察

这不是一个问题,而是警告其他人为了节省一些时间。 iOS 3 / iPhone OS 3上的NSNotificationCenter(我假设Mac OS X和iOS 4)具有以下行为: 如果您多次注册自己的具体通知,NSNotificationCenter将不会识别冗余,而是会向您发送尽可能多的通知给您,因为您已经注册了一个观察。 这几乎从来不是你想看到的行为,几乎总是偶然的。 例: 我希望我的视图控制器在接收到新数据时接收来自单例networking对象的通知: – (void) viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newDataArrived:) name:NewDataArrivedNotification object:[NetworkListener sharedNetworkListener]]; } 但早些时候,我已经把相同的东西在viewWillAppear : – (void) viewWillAppear { [super viewWillAppear]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newDataArrived:) name:NewDataArrivedNotification object:[NetworkListener sharedNetworkListener]]; } 请注意,这是完全相同的通知,parsing为相同的观察员,发件人和通知名称。 在这种情况下,如果我不删除其中一个addObserver调用,我会得到重复通知给我的视图控制器。 在multithreading环境中,这是一个受到伤害的世界。 相信我。 只要把它放在那里,以防其他人遇到这样的事情。

通知没有得到iOS 9.2

升级到iOS9.2后通知没有得到,但是到了iOS9.1,没有这种types的问题。 但是我不明白问题在哪里。 是iOS9.2的问题吗? 任何人都可以帮我解决这个问题。 提前致谢。

NSNotification与dispatch_get_main_queue

关于这个问题,我想知道是否有任何普遍接受的逻辑关于什么时候使用NSNotification,在你的主线程中使用观察者,还是使用GCD从后台线程派发工作到主线程? 看起来,通过观察器设置,你必须记得当你的视图卸载时拆掉观察者,但是你可靠地忽略了通知,当调度一个工作到主线程可能导致一个块被执行时,视图有被卸载。 因此,在我看来,通知应该会提高应用程序的稳定性。 我假设调度选项提供了我读过的GCD更好的性能? 更新: 我知道,通知和调度可以愉快地一起工作,在某些情况下,应该一起使用。 我试图找出是否有特定的情况下,应该/不应该使用。 一个例子:为什么我会select主线程来从调度块中发出通知,而不是只调度主队列上的接收函数? (显然在这两种情况下接收函数会有一些变化,但最终的结果看起来是一样的)。

应用程序:didFinishLaunchingWithOptions:在创build目标控制器之前触发通知

您好,我正在编写一个应用程序,当使用本地通知打开它时,应用程序会响应UI更新和内部状态更改。 我正在使用故事板,并设置了我的主视图控制器来观察状态更改: – (void)viewDidLoad { [super viewDidLoad]; // … [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resumeByNotification:) name:@"Resume" object:nil]; } 在我的应用程序代表我有这个: – (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { if (application.applicationState == UIApplicationStateInactive) { [[NSNotificationCenter defaultCenter] postNotificationName:@"Resume" object:self userInfo:notification.userInfo]; } } 这工作得很好:如果应用程序在后台运行,视图控制器将拦截通知并作出相应的反应。 (如果应用程序在前台运行,则由于正在直接处理用户界面,所以将忽略它。) 应用程序被杀并收到通知时出现问题。 我已经写在didFinishLaunchingWithOptions方法,使手机震动作为一个快速debugging技术:),我得到的通知: – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UILocalNotification *localNotification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (localNotification) { [[NSNotificationCenter defaultCenter] postNotificationName:@"Resume" […]

何时取消订阅UIView中的NSNotification

我在UIView中使用下面的NSNotifications,以便UIKeyboard出现时可以通知视图,并在屏幕上调整它的位置(框架): [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 上面的两个通知正在UIView的-init方法中订阅。 一旦视图从屏幕上消失,最好的地方在哪里取消订阅这些通知? 目前,当UIKeyboard出现在另一个视图中时,应用程序崩溃,大概是因为通知仍然被发送到当时发布的UIView。 另外,除了-init方法之外,还有更好的地方可以订阅通知吗? 感谢您的帮助。

谁发布我的UIKeyboardDidHideNotification?

我想注册到只有我的UIViewController正在发布的UIKeyboardDidHideNotification 。 当我做 : [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:self]; 我没有得到keyboardDidHide:任何电话keyboardDidHide:当我这样做: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 我从所有其他视图控制器以及我自己的调用。 我如何注册到仅由特定视图控制器引发的UIKeyboardDidHideNotification ?