如何对日期更改采取行动?

Posted

技术标签:

【中文标题】如何对日期更改采取行动?【英文标题】:How to fire action on date change? 【发布时间】:2013-09-10 03:46:13 【问题描述】:

我有 SQLite 数据库。

我想在日期更改时在数据库中插入行。

我只知道我应该使用UILocalNotification,但我不知道如何。

其他方法是在后台运行 NSTimer,但我不想这样做。

从我尝试过的教程中:

UIApplication* app = [UIApplication sharedApplication];
NSDate *date = [NSDate date]; 
// create the notification and then set it's parameters
UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];
if (notification)

        
    notification.fireDate = date;
    notification.timeZone = [NSTimeZone defaultTimeZone];
    notification.repeatInterval = 0;
    notification.alertBody = @"DONE:";
    
    // this will schedule the notification to fire at the fire date
    [app scheduleLocalNotification:notification];
    
    // this will fire the notification right away, it will still also fire at the date we set
    [app presentLocalNotificationNow:notification];
 

但在我的应用程序中,它应该在数据库中插入应用程序是在后台还是在前台。插入应在日期更改时进行。

【问题讨论】:

为什么需要在日期更改的确切时间添加此行?如果您的应用在新的一天开始并且该行尚未添加,为什么不简单地添加一个新行? NSTimer 仅在后台工作 10 分钟,最好根据您的要求使用 UILocalNotification。 不,我想在日期更改时插入.. 如果我按照你说的做,那么在早上 10 点我也必须向用户发送通知.. 应用程序处于后台或前台.. 谢谢@AnandGautam,但是怎么做? 【参考方案1】:

如果您想使用UILocalNotification,请参阅以下信息。

根据需要设置fireDateUILocalNotification,您的通知将在该日期生成。 您将通过 2(两种)方式获得生成的通知。 比如,

1)didFinishLaunchingWithOptions

=> 如果您的应用程序未运行,这将很有帮助;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

   .
   .
   .
   UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
   if (localNotif) 
   
      /// do your stuff
   
   .
   .

2)使用UILocalNotification的委托方法

=> 如果您的应用程序正在运行,这将很有帮助;

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif 
    /// do your stuff

你可以在这里写你的插入数据;

【讨论】:

是的,我知道......但是我应该在哪里写火灾通知,以便通知基于时钟触发而不依赖于任何点击或应用程序的背景前景...... 日期更改时...午夜 12:00 时钟在数据库中插入行.. 上午 11:00 更新数据库中的行,下午 6:00 更新数据库中的行。希望现在清楚.. 使用通知是个坏主意,但您可以在 didFinishLaunchingWithOptions 中使用不同的 fireDate 创建 3 个通知,例如 12:00 时钟、上午 11:00 和下午 6:00,我希望你知道在你需要做的事情之后:) 那么我应该使用什么来代替通知呢? 不可能触发这种类型的通知,如果您大约 5 天没有打开您的应用程序,那么您如何在这 5 天的数据库中更新/插入数据??【参考方案2】:

didFinishLaunchingWithOptions方法中添加这段代码

// date change
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dateChange) name:UIApplicationSignificantTimeChangeNotification object:nil];

YourDelegate.m文件中的实现方法

-(void)dateChange

  if ([[NSUserDefaults standardUserDefaults] objectForKey:@"LastAppOpenTime"] != nil)
  
    NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"LastAppOpenTime"];
    NSDate *currentDate = [NSDate date];

    NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:lastDate];
    double secondsInAnHour = 3600;
    NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

    if (hoursBetweenDates >= 24)
    
        //update database here.
    
  

  [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"LastAppOpenTime"];//Store current date

【讨论】:

【参考方案3】:

您可以存储 [NSDate 日期];到某个变量并根据最后日期放置条件,并使用 [NSDate date] 将条件内的变量更改为今天的日期;并根据需要进行修改。

【讨论】:

我正在获取日期,但我想在日期更改时的午夜在数据库中插入行... 哦,我明白了,您需要为它设置 localPushNotification 并存储日期和更改日期。 如果您的应用程序涉及 php 网络服务,那么您可以在服务器端收到通知,因为服务器端更容易考虑日期更改 不,我的应用完全基于时钟和通知,不涉及任何网络服务...您有任何链接,以便我可以参考... 你可以试试这两个链接 1) ***.com/a/16654552/2695503 和 2) ***.com/a/6048040/2695503 如果对你有帮助别忘了点赞:)

以上是关于如何对日期更改采取行动?的主要内容,如果未能解决你的问题,请参考以下文章

想要对准则2 ORM进行删除时不采取任何行动,而对于更新2则ORM中进行更新时不采取行动

何时对 PayPal 订阅采取行动?

如何根据检测到颤振应用程序中的锁定或关闭屏幕采取行动

我如何从我创建的列表中匹配一个国家,然后如果它在列表中则采取行动? (GeoIP 重定向)

获取动词没有要求采取正确的行动

当两个单独的 NSFetchRequest 都完成时采取行动