@interface MyViewController () {
NSTimer *timer;
int seconds;
...
}
@property (weak, nonatomic) IBOutlet UILabel *timerLabel;
@end
...
- (void)viewDidLoad
{
[super viewDidLoad];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
[self.timerLabel setText:@"1:00"]
seconds = 60;
}
- (void)updateTimer:(NSTimer *)theTimer {
if (seconds>0) {
seconds--;
int min = seconds/60;
int sec = seconds%60;
[timerLabel setText:[NSString stringWithFormat:@"%01d:%02d",min,sec]];
} else {
[timer invalidate];
NSLog(@"Timer end");
}
}
Из личного опыта: не стоит как писать свою cms так и юзать готовую. Особенно начинающему разработчику. Имеется ввиду что не стоит писать cms ради самой cms. Дело в том, что когда вы попытаетесь ее применить в каком-то нестандандартном проекте - окажеться что архитектура чего-то не позволяет сделать и приходиться строить костыли. В итоге через пару итераций cms превращается в набор костылей. Очень запутанный набор костылей.
За свою более чем десяти летнюю практику я пришел к выводу что cms и библиотеки слишком ограничивают. Зато за это время скопилось огромное кол-во решений всяких типовых задач. И теперь создавая новый проект просто перетягиваем классы и функции из "опытного багажа" в нужный проект и правим под собственные нужды. Т.е по сути тотже набор костылей но без всего лишнего.
Поэтому совет слудеющий - если есть проект который не горит по срокам - пишите с нуля с таким расчетом чтобы использовать тотже код и в других проектах. Но не гонитесь за универсальностью. Лучше в следующем проекте исправить пару методов в классе чем потратить день на написание класса на все случаи жизни. К следующему проекту вы уже будете видеть удобство/корявость тех или иных элементов ваших костылей и возможно захотите что-то в них поправить. В итоге у вас будет постоянно развиваемый и пополняемый "багаж костылей" который от проекта к проекту будет становиться все лучше и чище.
switch (principal.getAuthMethod()) {
case LOGIN: /* Login / password auth */
break;
case CERTIFICATE: /* Certificate auth */
break;
}