3

我正在开发一个 iPhone 应用程序,该应用程序需要使用 UILocalNotifications 提醒用户定期签到。如果他们几个小时没有签到,他们可能会被提醒几次,但我只想显示最新的通知。

现在,如果应用程序打开,我会收到 didReceiveLocalNotification:(UILocalNotification *) 通知的回调,我可以跟踪是否有通知显示。

如果应用程序没有运行并且用户单击 -action- 按钮,我会收到一个回调

  • (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

所以我可以关闭任何旧通知。但是,如果他们单击“取消”,则必须在一堆分层通知上单击“取消”,因为据我所知,我没有收到回调(如果应用程序未启动,我怎么能)并且在创建 UILocalNotification 以使来自应用程序的更新提醒自动关闭其他提醒时,似乎没有标志或其他东西。

如果应用程序在后台但正在运行,那就更糟了——首先,如果用户点击取消,我不会在那里得到任何类型的回调,所以我遇到了同样的问题——用户必须多次点击取消。其次,如果他们单击该操作,我会调用 ApplicationDidBecomeActive,但这与用户只是来回切换没有区别;我可以在这里解散并重新安排它们,但它似乎并不完美,有时会在它们被解散之前弹出一些。

有什么建议么?如果有办法让通知自动过期,那也很棒。我在网上看了一点,并没有找到太多帮助,但这似乎是一个很大的疏忽,所以希望有一些方法可以优雅地处理这个问题。

谢谢。

4

2 回答 2

1

正如您所指出的,当用户“取消”时,您将无法获得任何回调。

在您的情况下是否可以只提醒用户一次?一次只安排一个通知,并在应用启动/恢复时更新它。

于 2011-04-08T04:12:46.547 回答
0

我还没有尝试以下方法,但我相信这可以解决您的问题。使用CLLocationManagerstartMonitoringSignificantLocationChanges

每次设备的位置发生重大变化时,您的应用程序将在后台启动,并传递选项locationManager:didUpdateLocations:,您可以UILocalNotification从那里安排一个!

于 2012-10-10T05:21:45.957 回答