2012-12-08 45 views
22

Các chuyên gia, tôi có một kịch bản trong đó tôi cần phải thông báo cho người dùng ba lần một ngày (sáng, chiều, tối). Và thời gian cho các thông báo này sẽ khác nhau cho mỗi ngày, dựa trên giá trị cơ sở dữ liệu cho mỗi ngày.Tôi làm cách nào để lên lịch thông báo địa phương cho kịch bản sau?

Ba thông báo này có thể định cấu hình được. Có nghĩa là người dùng chỉ có thể chọn đặt buổi chiều và buổi tối trong khi tắt thông báo buổi sáng trong cài đặt.

Theo hiểu biết của tôi, tôi có thể đạt được điều này bằng cách sử dụng thông báo cục bộ.

Tôi có thể thực hiện như sau: - trước khi thoát ứng dụng, bên trong didFinishLaunchingWithOptions, tôi có thể kiểm tra thông báo tiếp theo là gì, là nó được đặt (bật/tắt). Nếu nó được đặt, tôi sẽ lên lịch cho nó. Nếu không, tôi chuyển sang loại thông báo tiếp theo và thực hiện tương tự. Nếu tất cả các thông báo được tắt, rõ ràng, sẽ không có thông báo nào được lên lịch.

Bây giờ khi thông báo xuất hiện, tôi có thể thấy cảnh báo bằng hai nút "Đóng" và "Chế độ xem". Nếu người dùng chọn "Chế độ xem", ứng dụng của tôi sẽ hoạt động trở lại và trước khi người dùng thoát thông báo tiếp theo được lên lịch.

Cho đến nay rất tốt.

Bây giờ, nếu người dùng chọn để chọn "Đóng" Tôi phải làm gì? Nó sẽ không khởi động ứng dụng của tôi và do đó thông báo tiếp theo sẽ không được lên kế hoạch?

Làm cách nào để đạt được điều này? Có cách nào tốt hơn để thực hiện việc này không?

Trợ giúp! Cứu giúp! Cứu giúp!

+0

Điều đó không có vẻ giống như những gì bạn muốn làm là rất khả thi hoặc có thể sử dụng được. Tôi khuyên bạn nên xem xét lại các yêu cầu của bạn và cố gắng giải quyết vấn đề theo một cách khác. –

Trả lời

37

Bạn chỉ có thể lên lịch tất cả (hoặc nhiều) thông báo cùng một lúc. Bạn không cần phải chờ người dùng đến Xem ứng dụng của bạn để lên lịch thông báo tiếp theo.

Từ the docs on UILocalNotification,

Một ứng dụng có thể chỉ có một số giới hạn các dự thông báo; hệ thống giữ thời gian sớm nhất-firing 64 thông báo (với các thông báo tự động thay đổi lịch đếm như một thông báo duy nhất) và loại bỏ phần còn lại

Vì vậy, nếu bạn có 3 thông báo mỗi ngày, bạn có thể trước lịch trình 3 tuần thông báo cùng một lúc. Tôi cho rằng bạn vẫn sẽ gặp sự cố nếu người dùng không mở ứng dụng của bạn trong một tháng, nhưng bạn có cần phải lo lắng về trường hợp đó không?

Dù sao, tôi chỉ muốn đảm bảo rằng rõ ràng bạn không cần lập lịch các thông báo này cùng một lúc.

Ví dụ:

UILocalNotification* n1 = [[UILocalNotification alloc] init]; 
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60]; 
n1.alertBody = @"one"; 
UILocalNotification* n2 = [[UILocalNotification alloc] init]; 
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90]; 
n2.alertBody = @"two"; 
[[UIApplication sharedApplication] scheduleLocalNotification: n1]; 
[[UIApplication sharedApplication] scheduleLocalNotification: n2]; 

Vì vậy, ngay cả khi người dùng chọn Đóng khi thông báo đầu tiên xuất hiện, điều thứ hai sẽ vẫn được chuyển giao.

Nhân tiện, phương thức didFinishLaunchingWithOptions được gọi ngay sau khi ứng dụng của bạn bắt đầu, không phải trước khi ứng dụng đóng. Điều đó nói rằng, bạn có thể lên lịch thông báo mới bất cứ khi nào bạn muốn.

+0

Cảm ơn Nate. Tôi đã nghĩ về nó nhưng không chắc đó có phải là cách đúng hay không. –

3

Bạn cũng có thể sử dụng thuộc tính repeatInterval để chúng tự lên lịch lại vô thời hạn. Tuy nhiên, bạn bị giới hạn ở các đơn vị trong NSCalendarUnit. Xem docs để biết thêm thông tin