Как я могу избежать выполнения этого блока if в viewDidLoad? - PullRequest
0 голосов
/ 20 мая 2018

Во-первых, извините за неточность в названии, но я постараюсь описать мою проблему как можно точнее.

Я занимаюсь разработкой приложения для управления затратами / расходами.В этом случае у меня есть блок в методе 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 метода, чтобы блок выполнялся именно тогда, когда это необходимо

1 Ответ

0 голосов
/ 20 мая 2018

Ваша первая мысль верна, вам нужно сохранить день, когда вы в последний раз подняли предел за пределами вашего приложения - и в пользовательских настройках по умолчанию это очевидное место.

Ваш код будет читатьсохраненную дату, получить текущую дату и рассчитать количество дней между ними - прочитайте документацию NSDate, есть методы, которые определяют разницу между двумя датами с некоторой степенью детализации (часы, дни и т. д.), вы делаетене нужно уменьшать значение NSDate, отсекая компонент времени самостоятельно, прежде чем вычислять разницу.

Назовите свой код при запуске приложения.Если вам нужно, чтобы ваше приложение работало после полуночи и вам нужно было увеличить лимит в секунду (или в третье время), ваш код должен рассчитать время, оставшееся до полуночи, и установить NSTimer для повторного вызова.

Если вы застряли при разработке решения, задайте новый вопрос с разработанным вами кодом, в чем заключается ваша проблема и т. Д., И кто-то, несомненно, поможет вам в этом.

...