如何避免viewDidLoad中的“if”块被执行?

问题描述 投票:0回答:1

首先很抱歉标题不准确,但我会尽可能准确地描述我的问题。

我正在开发一个应用程序来管理成本/费用。在这种情况下,我在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对象来跟踪调用raisedaylimit方法时,在YES和NO之间切换,但这似乎很复杂。
  • 我认为这个块可能需要在viewdidload方法之外,以便在需要时执行块
ios objective-c viewdidload
1个回答
0
投票

你的第一个想法是正确的,你需要存储你上次提出应用程序之外的限制的那一天 - 并且在用户默认值是显而易见的地方。

您的代码将读取存储的日期,获取当前日期,并计算它们之间的天数 - 阅读NSDate文档,有一些方法可以确定两个日期之间的差异,以某种粒度(小时,天等),在进行差值计算之前,您不需要通过自行剥离时间分量来减少NSDate值。

在应用启动时调用您的代码。如果您需要允许您的应用程序在午夜过后运行,并且需要提高限制第二(或第三等)时间,您的代码应该计算剩余的时间直到午夜并设置NSTimer再次调用自己。

如果您遇到设计解决方案的困难,请使用您开发的代码,您的问题等等来提出新问题,并且当时有人无疑会帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.