首页 > 解决方案 > 如何避免执行 viewDidLoad 中的这个“if”块?

问题描述

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

我正在开发一个应用程序来管理成本/费用。在这种情况下,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];


  */

 }

- 基本上,如果用户之前选择了每天跟踪成本,请输入该切换案例。- 在 switch 案例 1、2 等中表示一周中的几天,因此它应该在过去的每一天提高指定的成本限制。

我的问题:

此块位于 中viewdidload,因此每次启动应用程序时都会执行它。

因此,我的问题是,[self raisedaylimit]每次用户启动应用程序时都会调用它,所以我想避免这种情况,就像逻辑所说的那样,每天只执行一次。

可能的解决方案:

标签: iosobjective-cviewdidload

解决方案


您的第一个想法是正确的,您需要在应用程序之外存储上次提高限制的日期- 而在用户默认值中是显而易见的地方。

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

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

如果您在设计解决方案时遇到困难,请使用您开发的代码提出一个新问题、您的问题是什么等,届时无疑会有人帮助您。


推荐阅读