создать метод планирования для отображения пользовательских меток на 7-дневной ротации в Objective C (XCode) - PullRequest
2 голосов
/ 10 января 2012

Я делаю приложение для своей школы. У нас 7-дневный график ротации ... поэтому сегодня день G, завтра день A, четверг B, пятница C и понедельник обратно в D. Я хочу разместить UILabel на домашней странице своего приложения, которая будет выводить, какой «день» наступает в соответствии с обозначениями нашей школы AG ... может кто-нибудь придумать, как это сделать (это будет понимать новичок)?

проблема в том, что понедельник не всегда день "А", потому что мы ходим в 7-дневный цикл, а в школу ходим только 5 дней в неделю. Есть ли способы обойти это?

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

 - (void)viewDidAppear:(BOOL)animated
 {

   //get the date today

   NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
   [dateformatter setDateFormat:@"cccc, MMMM dd"];

  NSString *dateToday = [dateformatter stringFromDate:[NSDate date]];

   [currentdate setText:dateToday];


   //get the time today

   NSDateFormatter *timeformatter = [[NSDateFormatter alloc] init];
   [timeformatter setDateFormat:@"hh:mm a"];

   NSString *timeToday = [timeformatter stringFromDate:[NSDate date]];
   [currenttime setText:timeToday];

вопрос:

я бы использовал "setText:" для вывода его на метку? Я объявил розетку с именем * letterday в моем .h, и теперь пытаюсь отправить письмо ему, а затем это в моем .m:

[NSDate JL_currentRotationDayWithSchoolYearBeginningOnDateString:@"2011-09-12"];

[letterday setText: 

это выглядит правильно? извините, я так отстала от этого ...

1 Ответ

2 голосов
/ 10 января 2012

Вы можете просмотреть исходный код для всей категории здесь с комментариями: https://gist.github.com/1590955

#import "NSDate+RotationScheduleFormatter.h" в каждом файле реализации, в котором вы хотите использовать категорию.Затем используйте следующий вызов метода для получения текущего дня ротации:

[NSDate JL_currentRotationDayWithSchoolYearBeginningOnDateString:@"2011-08-01"];, где дата находится в формате YYYY-MM-DD.

. Это вернет перечисление типа RotationDay,один из kRotationDay[A-G].

Для того, чтобы праздничные перерывы и другие выходные выходили из школы на работу, вам нужно зайти в файл .m и отредактировать метод под названием + (int)numberOfWeekdayBreakDaysBetweenSchoolYearBeginningDate:(NSDate *)beginningDate andEndDate:(NSDate *)endDate1

.вы увидите массив с именем weekdayBreakArray с несколькими значениями (в формате YYYY-MM-DD).Удалите эти тестовые значения и добавляйте каждый день каждого перерыва, который попадает в будний день. Не добавлять даты, которые являются выходными.

Реализация:

Предполагая, что существует UILabel с именем rotationLetter, вы можете сделать следующее:

RotationDay rotationDayInt = [NSDate JL_currentRotationDayWithSchoolYearBeginningOnDateString:@"2011-08-01"];
if (rotationDayInt == kRotationDayA) {
    [rotationLetter setText:@"A"];
}
else if (rotationDayInt == kRotationDayB) {
    [rotationLetter setText:@"B"];
}

и т. Д.с большим количеством операторов else if до достижения kRotationDayG.

Примечания:

Не забудьте заключить ваш вызов этого метода в оператор if, который проверяетЕсли вы находитесь в отпуске или на выходных, иначе результат будет неверным.Также обратите внимание, что я не оптимизировал этот класс для управления памятью, используя ручное сохранение / освобождение, потому что я не был уверен, используете ли вы ARC. Кроме того, вся система выходит из строя, если у вас снежный день или другой неожиданный перерыв, и вы не можете своевременно обновить приложение.Поэтому я настоятельно советую вам загружать массив дат с сервера каждый раз, когда вы открываете приложение, на случай, если вам нужно внести изменения на лету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...