应用程序未运行时iOS8上的LocalNotification无法正常工作
我有一个使用本地通知的应用程序。直到最近,一切都很好,但在iOS 8发布后,当应用程序未运行时,我的本地通知无法工作。请从进程中删除。这是我在应用程序中设置本地通知的代码委托应用程序未运行时iOS8上的LocalNotification无法正常工作,ios,objective-c,ios8,uilocalnotification,Ios,Objective C,Ios8,Uilocalnotification,我有一个使用本地通知的应用程序。直到最近,一切都很好,但在iOS 8发布后,当应用程序未运行时,我的本地通知无法工作。请从进程中删除。这是我在应用程序中设置本地通知的代码委托 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [[NSNotificationCenter defaultCenter]
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[NSNotificationCenter defaultCenter] postNotificationName:localReceived object:self userInfo:notification.userInfo];
// Set icon badge number to zero
application.applicationIconBadgeNumber = 0;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])
{
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:
UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
else if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotificationTypes:)])
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
...
// Local notificaiton example. Icon badge
UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
NSLog(@"locationNotification:%@",locationNotification.alertBody);
if (locationNotification) {
// Set icon badge number to zero
application.applicationIconBadgeNumber = 0;
// call local notification method
[self application:[UIApplication sharedApplication] didReceiveLocalNotification:locationNotification];
}
return YES;
}
当我的应用程序未运行时,将调用didFinishLaunchingWithOptions:方法。在其中,我再次调用didReceiveLocalNotification方法,其中我调用postNotificationName。我将观察者放在我的ViewControllers ViewDidLoad方法中:
- (void)viewDidLoad
{
...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(recieveLocalNotification:) name:localReceived object:nil];
...
}
问题在于,当应用程序未运行时,永远不会调用recieveLocalNotification:方法。每次应用程序处于后台或运行时都会调用它。有人能告诉我我做错了什么吗?
提前谢谢 -视图控制器视图实例化后调用viewDidLoad,视图在首次访问viewController.view后实例化
因此,在发布通知之前,您可以尝试调用viewController.view。如果您的应用程序未运行并且重新启动到后台,则您的viewController将不会被实例化,因此无法接收通知。您好@Paulw11,感谢您的快速回复!我使用的VC是在didFinishLaunchingWithOptions方法中实例化的,其中3个点在我的代码片段中。是不是还是太快了?我能做些什么来规避塔特?添加一个NSTimer?为什么不直接调用该方法,而不是依赖于通过NSNotificationcentre进行解耦?事实上,我对iOS开发相当陌生,我不确定具体是如何实现的。麻烦您在注释中给我写几行代码好吗?一旦加载了viewController,假设它在变量myVC中,您只需说[myVC theMethodToCall]