2015-11-13 19 views
6

Tôi đang cố gắng gửi thông báo địa phương vào thời gian đã lên lịch. Nhưng các thông báo không xuất hiện trên màn hình, nhưng nó được hiển thị trong trung tâm thông báo khi tôi vuốt xuống.

Đây là những gì tôi đang cố gắng đạt được       Đây là những gì tôi nhận được.
        iOS Swift Thông báo địa phương không "bật lên"

Mã này là từ didFinishLaunchingWithOptions appdelegate tôi().

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

Và đây là mã cho 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) 
} 

Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn!

+0

Trong cài đặt iOS> Ứng dụng của bạn là cài đặt quyền được đặt đúng không? Cụ thể, hãy kiểm tra cài đặt 'Hiển thị trên màn hình khóa'. Ngoài ra, bạn có thể vui lòng đăng tải trọng bạn đang gửi bằng thông báo đẩy hay không. – JoGoFo

+0

Có thiết lập để hiển thị trên màn hình khóa. Và ý của bạn là gì? Đây là tất cả các mã tôi đã viết cho các thông báo. –

+0

Xin lỗi, đã nghĩ đến thông báo đẩy chứ không phải thông báo địa phương có thông báo tải trọng. Bạn có đang lên lịch đủ xa trong tương lai để nhận được thông báo không _after_ bạn khóa thiết bị? – JoGoFo

Trả lời

4

Vấn đề của bạn là cách bạn đang chuyển đổi đối tượng NSDateComponents thành một NSDate.

Chỉ cần gọi components.date mà không cần đặt calendar cho đối tượng NSDateComponents sẽ trả lại nil.

Hãy thử sử dụng này để thay thế:

notification.fireDate = calendar.dateFromComponents(components) 

Ngoài ra, bạn có thể thiết lập calendar tài sản trên các thành phần đối tượng:

components.calendar = calendar 

Bởi vì bạn đang thiết lập các fireDate tài sản trên các đối tượng thông báo cho nil, nó sẽ kích hoạt ngay lập tức, tức là trước khi bạn có cơ hội đóng ứng dụng và khóa màn hình. Hành vi này được ghi lại trong UILocalNotification class reference

0

Kiểm tra Cài đặt> YourApp> Thông báo.

Xác minh quyền ở đó.

enter image description here

+0

Có, tất cả mọi thứ được bật. Nhưng vẫn không thể làm cho nó hiển thị mặc dù. Nó không hiển thị ngay cả khi điện thoại được mở khóa. Đã thử sử dụng các biểu ngữ và cảnh báo. –

1

Tôi nhận được cùng một hành vi lạ. Chỉ cần tạo một dự án mới để kiểm tra mã của bạn.

gì tôi nhận thấy khi bạn thay đổi fireDate của bạn để:

notification.fireDate = NSDate(timeIntervalSinceNow: 10)    

Bạn sẽ nhận được hành vi truy nã của bạn.

Hy vọng rằng sẽ giúp ích một chút!

+0

Tôi chỉ thử điều đó và nó hoạt động! Nhưng điều tôi muốn làm là lên lịch để nó lặp lại hàng ngày cùng lúc. Bạn không chắc chắn lý do tại sao sử dụng các thành phần lịch không hoạt động. –

Các vấn đề liên quan