2015-11-13 13 views
6

मैं निर्धारित समय पर एक स्थानीय अधिसूचना भेजने की कोशिश कर रहा हूं। लेकिन अधिसूचना स्क्रीन पर दिखाई नहीं देती है, लेकिन जब मैं स्वाइप करता हूं तो यह अधिसूचना केंद्र में दिखा रहा है।

यही वह है जिसे मैं       प्राप्त करने की कोशिश कर रहा हूं यह मुझे मिल रहा है।
        आईओएस स्विफ्ट स्थानीय अधिसूचना "पॉपिंग अप" नहीं

इस कोड मेरे AppDelegate की didFinishLaunchingWithOptions से है()।

// Setup local push notifications 
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound], categories: nil)) 
    scheduleNotifications() 

और यह() scheduleNotifications के लिए कोड

func scheduleNotifications() { 
    // create a corresponding local notification 
    let notification = UILocalNotification() 

    // Get today's date, time and year 
    let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year], fromDate: NSDate()) 
    // Sets the fire time to 2pm/1400 hours to anticipate user for lunch time 
    components.hour = 19 
    components.minute = 13 
    components.second = 00 

    notification.fireDate = components.date    // Sets the fire date 
    notification.alertBody = "Enjoyed your lunch? Don't forget to track your expenses!" 
    notification.alertAction = "Add expense" 
    notification.repeatInterval = NSCalendarUnit.Day // Repeats the notifications daily 

    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
} 

किसी भी मदद की सराहना की होगी। धन्यवाद!

+0

में आईओएस सेटिंग्स में दस्तावेज किया गया है> आपकी ऐप अनुमति सेटिंग्स सही हैं? विशेष रूप से, 'लॉक स्क्रीन पर दिखाएं' के लिए सेटिंग की जांच करें। साथ ही, क्या आप पुश अधिसूचना के साथ भेज रहे पेलोड को पोस्ट कर सकते हैं। – JoGoFo

+0

हां लॉकस्क्रीन पर दिखाने के लिए सेट है। और पेलोड द्वारा आपका क्या मतलब है? नोटिफिकेशन के लिए मैंने लिखा यह सब कोड है। –

+0

क्षमा करें, स्थानीय अधिसूचना के बजाय पुश अधिसूचना के बारे में सोच रहा था, जिसमें एक पेलोड है। क्या आप भविष्य में काफी समय तक शेड्यूल कर रहे हैं ताकि अधिसूचना प्राप्त हो सके _after_ आप डिवाइस को लॉक कर सकते हैं? – JoGoFo

उत्तर

4

आपकी समस्या यह है कि आप NSDateComponents ऑब्जेक्ट को एनएसडीएटी में परिवर्तित कर रहे हैं।

सीधे शब्दों में NSDateComponents वस्तु के लिए एक calendar की स्थापना nil वापस आ जाएगी बिना components.date बुला।

कोशिश का उपयोग कर इस बजाय:

notification.fireDate = calendar.dateFromComponents(components) 

वैकल्पिक रूप से, आप घटकों पर calendar संपत्ति सेट कर सकते हैं आपत्ति:

components.calendar = calendar 

क्योंकि आप nil करने के लिए सूचना वस्तु पर fireDate संपत्ति सेट कर रहे हैं, यह तुरंत आग लग जाएगा, यानी आपके पास ऐप बंद करने और स्क्रीन को लॉक करने का मौका मिलने से पहले। यह व्यवहार UILocalNotification class reference

0

सेटिंग्स> YourApp> अधिसूचना देखें।

वहां अनुमतियां सत्यापित करें।

enter image description here

+0

काम नहीं करता हां, सबकुछ चालू है। लेकिन फिर भी इसे दिखाने के लिए नहीं मिल सकता है। यह तब भी नहीं दिखता है जब फोन अनलॉक हो। बैनर, और अलर्ट का उपयोग करने का भी प्रयास किया। –

1

मैं एक ही अजीब व्यवहार मिलता है। बस अपने कोड का परीक्षण करने के लिए एक नई परियोजना बनाई।

मैं क्या जब आप करने के लिए अपने fireDate बदलने देखा:

notification.fireDate = NSDate(timeIntervalSinceNow: 10)    

आप अपने वांछित व्यवहार मिल जाएगा।

उम्मीद है कि थोड़ा सा मदद करता है!

+0

मैंने अभी कोशिश की और यह काम करता है! लेकिन मैं जो करना चाहता था उसे शेड्यूल करना है ताकि वह उसी समय हर रोज दोहराए। निश्चित नहीं है कि कैलेंडर घटकों का उपयोग क्यों नहीं किया गया था। –

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