首先很抱歉标题不准确,但我会尽量准确地描述我的问题。
我正在开发一款管理成本/费用的应用。在这种情况下,我在viewdidload
方法中有块:
关于我到目前为止所得到的一段代码:
-(void)viewDidLoad {
[super viewDidLoad];
if([[self getfrequencyselected] isEqualToString:@"Daily"] && [self limitneedstoberaised]){
NSDateComponents *component = [[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:[NSDate date]];
switch ([component weekday]) {
case 1:[self raisedaylimit];
break;
case 2: [self raisedaylimit];
break;
--- etc,etc ---
default:
break;
}
}
}
-(BOOL)limitneedstoberaised{
/*
Something like this:
If today's date is the same as the date stored in the SQLite DB (LASTUPDATEDATE column),
then return FALSE, else return TRUE;
[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2];
*/
}
- 基本上,如果用户之前选择了每天跟踪成本,请输入该开关案例。 - 在交换机案例1,2等中表示一周中的日期,因此它应该每天都提高指定的成本限制。
我的问题:
此块位于viewdidload
,因此每次启动应用程序时都会执行此块。
我的问题是,每次用户启动应用程序时都会调用[self raisedaylimit]
,所以我想避免这种情况,只需每天执行一次,就像逻辑所说的那样。
可能的解决方案:
raisedaylimit
方法时进行跟踪,在YES和NO之间切换,但这看起来很复杂。viewdidload
方法之外,以便在需要时执行块答案 0 :(得分:0)
您的第一个想法是正确的,您需要存储上次提升应用程序外限制的那一天 - 并且在用户默认设置中显而易见。
您的代码将读取存储的日期,获取当前日期,并计算它们之间的天数 - 阅读NSDate
文档,有一些方法可以确定两个日期之间的差异到某个粒度(小时) ,天等等),在进行差异计算之前,您不需要通过自行剥离时间分量来减少NSDate
值。
在应用启动时调用您的代码。如果您需要允许您的应用程序在午夜过后运行,并且需要在第二(或第三等)时间内提高限制,则代码应计算剩余时间至午夜,并设置NSTimer
再次调用自己。
如果您遇到设计解决方案的问题,请使用您开发的代码,问题所在的问题等问一个新问题,等等。毫无疑问,有人会帮助您。