【问题标题】:Increment NSUserDefaults number each day at midnight (excluding weekends)每天午夜增加 NSUserDefaults 数量(不包括周末)
【发布时间】:2017-04-04 18:18:10
【问题描述】:

我正在制作一个应用程序,它会自动显示时间表轮换中的课程列表。我已经完成了核心功能,但我的目标是让用户在首次启动时输入轮换次数,然后在后台增加周一至周五,而在周末。例如,如果用户在星期五下载应用程序并将该天输入为第 5 天,它应该保持第 5 天到星期一,然后将变为第 6 天。如果用户不这样做,我也希望它更新它打开应用程序几天。这是我当前的代码:

- (void)checkIfDayChanged {
NSDate *open = [userDefaults objectForKey:@"openDate"];
NSDate *close = [userDefaults objectForKey:@"closeDate"];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSString *openString = [dateFormat stringFromDate:open];
NSString *closeString = [dateFormat stringFromDate:close];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
BOOL weekend = [gregorian isDateInWeekend:open];

NSTimeInterval distanceBetweenDates = [close timeIntervalSinceDate:open];
NSInteger days = ((NSInteger)distanceBetweenDates) / (60 * 60 * 24);

if (![openString isEqualToString:closeString]) {
    if (!weekend) {
        [userDefaults setInteger:[userDefaults integerForKey:@"dayNumber"] + days forKey:@"dayNumber"];
        [userDefaults synchronize];
    }
}

问题是,据我了解,iOS 只能在应用打开时检查,而不是在后台检查,这样对吗?而且,这并没有说明周末不增加值。

【问题讨论】:

  • 你是在让我们猜测这段代码有什么问题吗?我建议你告诉我们。
  • @meaning-matters 对不起,我今天早些时候匆忙写了这篇文章。我编辑解释了主要的 2 个问题。
  • 现在很清楚了。为什么要在应用未打开时更新?我的意思是,当用户再次打开应用程序时,可以计算下一个轮换次数,他会怎么注意到?

标签: ios objective-c nsdate increment


【解决方案1】:

如果您有服务器并且还需要定期下载内容,请查看background fetch。然后,您可以将您的轮换编号更新代码放入您确实必须这样做的地方。请注意,如果您没有要通过 Internet 加载的内容,则不应使用后台提取。

了解工作日应该会对您有很大帮助:

NSDate*   date    = ...;
NSInteger weekday = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday 
                                                   fromDate:date];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多