8

मुझे रिमोट अधिसूचना मिलती है और अधिसूचना के प्रकार के अनुसार, नेविगेशन नियंत्रक के दृश्य नियंत्रकों को बदलें।ऐप नहीं चलते समय रिमोट अधिसूचना को संभालने पर क्रैश

यह सब ठीक काम करता है जब ऐप अग्रभूमि में होता है, या जब ऐप पृष्ठभूमि में होता है लेकिन पूरी तरह से बंद नहीं होता है (मल्टी-टास्किंग बार से)।

लेकिन, जब ऐप बंद हो जाता है, और रिमोट अधिसूचना प्राप्त होती है तो यह खुलती है जैसे ही यह खुलती है। क्या मैं ViewControllers को स्थापित करने के तरीके से गलत कर रहा हूं?

यहां कुछ कोड है।

- (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.userInfo में भेज रहा था। इसके अलावा, रिमोट नॉटिफ़ स्पष्ट रूप से 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 डिबग मोड से शुरू बंद करो, और जब एप्लिकेशन पुश अधिसूचना (बंद एप्लिकेशन) यदि साथ शुरू आपका फोन मैक से जुड़ा हुआ है (अभी भी आपका फोन एक्सकोड के साथ डीबग मोड में) यह क्रैश हो जाएगा। अनपेक्षित फोन के साथ इस सेनारियो का परीक्षण करें।

+0

इसने मेरी समस्या को हल किया, लेकिन वह क्यों है ?! मेरे लिए कोई समझ नहीं आता – Evils

+0

जैसा कि आपने मेरे लिए कोई समझ नहीं ली है। लेकिन मुझे लगता है कि डिवाइस और मैक के साथ यहां कुछ कनेक्शन है। – damithH

+0

यह मेरे लिए काम किया! बिल्कुल कोई समझ नहीं आता है। –

संबंधित मुद्दे