2015-01-16 5 views
0

로컬 알림을 사용하는 앱이 있습니다. 최근까지 모든 것이 잘 작동했지만 iOS 8이 출시 된 후 앱이 실행되지 않을 때 (프로세스에서 제거됨) 내 로컬 알림이 작동하지 않습니다. 내 로컬 알림을 설정하는 응용 프로그램 대리인의 코드입니다.앱이 실행되지 않을 때 iOS8의 LocalNotification이 제대로 작동하지 않습니다.

- (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이 있다는 것입니다. 앱이 백그라운드에서 실행될 때마다 호출됩니다. 아무도 내가 여기서 뭘 잘못하고 있다고 말할 수 있습니까? 미리 감사드립니다.

+1

응용 프로그램이 실행 중이 아니며 백그라운드로 다시 시작되면 viewController가 인스턴스화되지 않으므로 알림을받을 수 없습니다. – Paulw11

+0

안녕하세요 @ Paulw11, 빠른 답변에 감사드립니다! 사용중인 VC는 ** didFinishLaunchingWithOptions ** 메소드에서 인스턴스화됩니다 (여기서 3 개의 점은 내 코드 스 니펫에 있음). 아직도 너무 빠르다 고 할 수 있겠습니까? 나는 터트를 우회하기 위해 무엇을 할 수 있습니까? NSTimer를 추가 하시겠습니까? – iPhoneNoob

+0

왜 NSNotificationcentre를 통한 감 결합에 의존하지 않고 직접 메서드를 호출할까요? – Paulw11

답변

0

보기 컨트롤러보기가 인스턴스화 된 후에 viewController.view에 처음 액세스 한 후에보기가 인스턴스화됩니다.

알림을 게시하기 전에 viewController.view으로 전화를 걸어보십시오.

관련 문제