应用程序未运行时iOS8上的LocalNotification无法正常工作

应用程序未运行时iOS8上的LocalNotification无法正常工作,ios,objective-c,ios8,uilocalnotification,Ios,Objective C,Ios8,Uilocalnotification,我有一个使用本地通知的应用程序。直到最近,一切都很好,但在iOS 8发布后,当应用程序未运行时,我的本地通知无法工作。请从进程中删除。这是我在应用程序中设置本地通知的代码委托 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [[NSNotificationCenter defaultCenter]

我有一个使用本地通知的应用程序。直到最近,一切都很好,但在iOS 8发布后,当应用程序未运行时,我的本地通知无法工作。请从进程中删除。这是我在应用程序中设置本地通知的代码委托

- (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]