8

원격 알림을 받고 알림 유형에 따라 탐색 컨트롤러의보기 컨트롤러를 변경합니다.앱이 실행되지 않을 때 원격 알림을 처리 할 때 크래시가 발생합니다.

앱이 포 그라운드에 있거나 앱이 백그라운드에 있지만 완전히 닫히지 않은 경우 (멀티 태스킹 표시 줄에서) 모두 정상적으로 작동합니다.

하지만 앱이 닫히고 원격 알림을 받으면 앱이 열리 자마자 충돌이 발생합니다. ViewController를 설치하는 방식에 문제가 있습니까?

여기에 몇 가지 코드가 있습니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary 
*)launchOptions { 
    // Push required screens into navigation controller 

     UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

    //Accept push notification when app is not open 
    if (remoteNotif) {  
     [self handleRemoteNotification:application userInfo:remoteNotif.userInfo]; 
     return YES; 
    } 

    [window addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 

    return YES; 
} 

-(void) handleRemoteNotification:(UIApplication *)application userInfo:(NSDictionary *)userInfo { 
    application.applicationIconBadgeNumber = 0; 

NSMutableArray *viewControllers = [NSMutableArray array]; 
    [viewControllers addObject:driverWaitViewController]; 
    [viewControllers addObject:newJobsViewController]; 

    [navigationController setViewControllers:viewControllers]; 
} 

답변

15

을 나는 이것이 해결 얻고, 내가 생각으로는, 뷰 컨트롤러와는 아무 상관이있다.

문제는 다음 줄에 있습니다. 나는 remoteNotif 자체보다는 remoteNotif.userInfo를 보내고 있었다. 또한 remoteNotif는 분명히 UILocalNotification 유형이 아닙니다. 이것은 NSDictionary 객체입니다.

전에

UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

[self handleRemoteNotification:application userInfo:remoteNotif.userInfo]; 

은이어야한다 앱에서 푸시 알림 (폐쇄 응용 프로그램) 경우에 시작할 때 엑스 코드 디버그 모드에서 시작 응용 프로그램을 닫은 경우

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

[self handleRemoteNotification:application userInfo:remoteNotif]; 
2

알림을받을 때 응용 프로그램을 제대로 초기화하지 않았습니다. 여기에 방법 : didFinishLaunchingWithOptions : 응용 프로그램을 변경

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions { 
    // Push required screens into navigation controller 

    NSDictionary *notif= [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

    [window addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 

    //Accept push notification when app is not open 
    if (notif) {  
     [self handleRemoteNotification:application userInfo:notif]; 
    } 

    return YES; 
} 
+0

회신 해 주셔서 감사합니다. 문제는 뭔가 다른. 내가 어떻게 해결했는지 보아라. – Prasanna

+0

그래, 그게 이상하다고 생각했지만, 나는 따라 잡지 못했다. 죄송합니다. – vakio

7

귀하의 휴대 전화가 맥 (여전히 xcode와 디버그 모드에서 귀하의 휴대 전화)에 연결되어 충돌이 될 것입니다. 전화가 연결되지 않은 상태에서이 senario를 테스트하십시오.

+0

이것은 지금 내 문제를 해결했지만, 그 이유는 무엇입니까?! 나를 위해 전혀 이해가 안 돼 – Evils

+0

u는 나를 위해 감각도 말했다. 하지만 난 여기 장치와 맥과의 연결을 생각해. – damithH

+0

이것은 나를 위해 일했습니다! 절대 의미가 없습니다. –

관련 문제