Ios 我怎样才能避免这种情况;如果;要执行viewDidLoad中的块?
首先,很抱歉标题不准确,但我会尽可能准确地描述我的问题 我正在开发一个应用程序来管理成本/费用。在这种情况下,我在Ios 我怎样才能避免这种情况;如果;要执行viewDidLoad中的块?,ios,objective-c,viewdidload,Ios,Objective C,Viewdidload,首先,很抱歉标题不准确,但我会尽可能准确地描述我的问题 我正在开发一个应用程序来管理成本/费用。在这种情况下,我在viewdidload方法中使用了这个块: 关于我到目前为止得到的信息的一段代码: -(void)viewDidLoad { [super viewDidLoad]; if([[self getfrequencyselected] isEqualToString:@"Daily"] && [self limitneedstoberaised]){ NSDate
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]
将因此在用户每次启动应用程序时被调用,因此我希望避免这种情况,就像逻辑所说的那样,每天只执行一次
可能的解决方案:
- 我曾考虑过创建一个NSUserDefaults对象,以便在调用
方法时跟踪,在YES和NO之间切换,但这似乎很复杂raisedaylimit
- 我认为这个块可能需要在
方法之外,以便在需要时执行该块viewdidload
NSDate
文档,有一些方法可以确定两个日期之间在某种粒度(小时、天等)上的差异,在进行差异计算之前,您无需通过自己去除时间分量来减少NSDate
值
在应用程序启动时调用您的代码。如果您需要允许应用程序运行超过午夜,并且需要将限制提高一秒(或第三秒等),则代码应计算到午夜的剩余时间,并设置一个NSTimer
以再次调用自身
如果您在设计解决方案时遇到困难,请使用您开发的代码问一个新问题,您的问题是什么,等等。毫无疑问,在这一点上,有人会帮助您。“此块位于viewdidload中,因此每次启动应用程序时都会执行它”。这就是
viewDidLoad
的意思。实际上,它的意思是,每次这个视图控制器出现并获得它的视图时。如果那不是你想运行代码的时候,那么这是一个愚蠢的地方“也许这个块需要在viewdidload方法之外,以便在需要时执行该块”好的,那么什么时候需要它?如果您可以告诉我们,我们可以建议将代码放置在何处以便运行。嗨,matt:)。谢谢你的回复。所以我会告诉你,基本上当用户启动应用程序时,程序块会检查是否选择了每日、每周或每月的频率。基于此,开关将确定在哪一天需要提高限值。当限制已经提高时,将不执行此块。我不确定它现在是否更有意义:)谢谢你的回答:)。我发现了一些东西NSCalendar
有一个名为-(BOOL)isDate:(NSDate*)date1 inSameDayAsDate:(NSDate*)date2 NS\u AVAILABLE(10\u 9,8\u 0)
的方法,如果两个日期在同一天,则返回TRUE。我的代码可以是这样的:如果今天和存储的最后更新的日期在同一天,什么也不做,否则[self-raisedaylimit];我每天只需要提高限额一次。你认为这样行吗?或者我遗漏了什么吗?“你认为这行得通吗?”-问问自己这样的问题:你需要在每个日历日或你的应用程序运行时每天提高一次限制吗?如果你的应用程序在午夜执行,你需要提高限制吗?这里没有人能为你回答这些问题。一旦你有了答案,就要设计出处理它们的算法。