在iPhone中设置本地通知(每天一个,其他为将来日期)

时间:2011-08-29 12:12:18

标签: iphone objective-c

我正在实施提醒应用程序。有两个提醒(一个用于日常和其他用于未来日期。)每日提醒工作正常。在应用程序中有一些提示,当用户喜欢一个提示时,我希望它能够将来保存该提示的日期(例如:8月29日晚9点)。任何人都可以帮助我实现这个场景的正确路径。所有提示都保存在一个数组中。如何保存不同的时间和日期用户从日期选择器中选择一个数组并在正确的时间触发本地通知并显示当天保存的提示用户。 (我尝试使用NSUserdefaults来保存日期和时间,并从数组中检索提示索引并比较两者但不起作用)。

3 个答案:

答案 0 :(得分:10)

如上所述,您可以通过UILocalNotification执行此操作。听起来您在将来安排通知时遇到了麻烦?请尝试下面的代码段:

    // get app instance
    UIApplication *app = [UIApplication sharedApplication];
    // create local notif
    UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];
    if (notification) {
       NSDate *oneMinuteFromNow = [[NSDate date] dateByAddingTimeInterval:60];
       notification.fireDate = oneMinuteFromNow;
       notification.timeZone = [NSTimeZone defaultTimeZone];

       NSString *notificationMessage = @"Alarm";
       notification.alertBody = notificationMessage;
       notification.soundName = UILocalNotificationDefaultSoundName;

       // schedule notification
       [app scheduleLocalNotification:notification];
       // fire notification right away
       [app presentLocalNotificationNow:notification];
    }

可以更新变量"oneMinuteFromNow"以反映您需要的未来约会。仅供参考,如果您需要重复通知,Apple为您提供的重复间隔有一些限制(例如,他们只能重复NSSecondCalendarUnit, NSMinuteCalendarUnit, NSHourCalendarUnit, NSWeekdayCalendarUnit,等。)

答案 1 :(得分:0)

听起来您可能可以使用UILocalNotification来发送通知。您的应用程序无需运行即可发送本地通知。 UILocalNotifications确实有limitations

您需要在应用退出之前使用UILocalNotification安排所有提醒。每个应用最多可以有64个通知,当用户打开您的应用时,您可以添加更多内容来替换已经触发的应用。

答案 2 :(得分:-1)

问题是您的应用程序需要在将来运行时用户希望收到通知,而iOS或用户可以随时终止您的应用程序,或者重启设备。

执行此操作的一种方法是让后台守护程序一直运行,但iOS Developer Agreement不允许这样做。

在* NIX系统上,您可以使用cron。虽然iOS基于FreeBSD,一种UNIX,但它没有cron,也没有App开发人员可用。我并不完全确定,所以我建议谷歌搜索是否有办法在iOS上实现定期任务。但我很确定没有,或者我现在已经听说过了。

但是,您可以使用推送通知。这将要求您还编写一个Web应用程序,将用户的通知日期保存在数据库中,然后在所需的时间通过Apple的推送通知服务器发出推送通知。

从最终用户的角度来看,这正是您想要的,但这也意味着您的整个应用程序(包括Web应用程序和数据库)与使用cron实现它的过程相比变得更加复杂或守护进程。

虽然有推送通知托管服务,但可以通过非常适当的费用来处理您需要的大部分内容。