每天午夜增加NSUserDefaults号码(周末除外)

时间:2017-04-04 18:18:10

标签: ios objective-c nsdate increment

我正在创建一个应用程序,它会自动显示计划轮换中的类列表。我的核心功能已经完成,但我的目标是让用户在首次启动时输入转数,然后在后台增加周一到周五,在周末增加。例如,如果用户在星期五下载应用程序并在第5天进入该日期,那么它应该在第5天一直到星期一,然后将成为第6天。如果用户没有&#39我也希望它更新它;打开应用程序几天。这是我目前的代码:

- (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只能在应用程序打开时检查,而不是在后台,这是正确的吗?而且,这并不能说明周末没有增加价值。

1 个答案:

答案 0 :(得分:0)

如果您有服务器并且还需要定期下载内容,请查看background fetch。然后,您可以将旋转编号更新代码放在那里。请注意,如果没有内容可以通过互联网加载,则不应使用后台提取。

获得工作日应该会对你有所帮助:

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