Сокращение NSNumber самостоятельно - 1, автоматически

Итак, в основном, я пытаюсь создать код, который позволяет NSNumber сокращаться на 1 каждую минуту,

Это то, что у меня есть до сих пор.

- (void)viewDidLoad {
[super viewDidLoad];
NSNumber *numVar = [NSNumber numberWithUnsignedChar:99];
[self num];
}
-(void)num{
usleep(60000000);
NSNumber *numVar = [NSNumber numberWithUnsignedChar:numVar-1];
[self num];
}

Во-первых, он не будет уменьшаться на один раз в минуту, а во-вторых, неправильно ли иметь начальный numVar в viewDidLoad?

4 ответа

Мы пробовали это, и оно отлично работало для того, что нам нужно: вам нужно перестроить это в своем коде, хотя

- (void)viewDidLoad{
 NSTimer *timer;
 int minutes = 0;

 //Creating a label that shows the timer ; i assume you have one that is already linked
 _labelTimer.text = [NSString stringWithFormat:@"This is %i minute", minutes];

 //Creating the timer itself with the NSTimer object
 timer = [NSTimer scheduledTimerWithTimeInterval: 60.0 target: self selector:@selector(decreaseTimeCount) userInfo:nil repeats:YES]; 

 //Note that 60 is the number of seconds before it calls the selector. You can use 1 if you want it to change your timer/clock every second
}
- (void)decreaseTimeCount{

 //The method changes the value of my variable and updates the label. If i'm at the 10th minute, i could do something, like perform a segue.

 minute+=1;
 _labTimer.text = [NSString stringWithFormat:@"This is %i minutes", minutes];

 if (minutes == 10){
 //do stuff 
 }

}


Вы спите внутри основного потока, блокируя свой пользовательский интерфейс. Вам нужно использовать NSTimer или аналогичный механизм синхронизации для периодической работы функции без блокировки.


Всякий раз, когда мне нужно что-то быстро, я делаю это так

- (void)viewDidLoad 
{
 [super viewDidLoad];
 [self performSelector:@selector(num) withObject:nil afterDelay:60];
}

- (void)num
{
 NSNumber *numVar = [NSNumber numberWithUnsignedChar:numVar-1];
 [self performSelector:@selector(num) withObject:nil afterDelay:60];
}

И вы можете решить в функции num, потому что вы хотите сделать это снова через минуту или нет.


@implementation YourViewController 
{
 NSNumber *numVar;
} 

- (void)viewDidLoad 
{
 [super viewDidLoad]; 
 numVar = [NSNumber numberWithUnsignedChar:99];
 [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
}

- (void)timerFireMethod:(NSTimer *)timer
{
 numVar = [NSNumber numberWithInt:[numVar intValue] - 1];
}

licensed under cc by-sa 3.0 with attribution.