2014-10-03 2 views
1

Ok так в основном, я пытаюсь построить некоторый код, который позволяет получать 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]; 
} 

Во-первых, это не приведет к сокращению на один каждую минуту, а во-вторых, это не так, чтобы иметь в viewDidLoad начальный numVar?

ответ

2

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

- (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 
    } 

} 
1

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

0
@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]; 
} 
0

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

- (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, потому что вы хотите сделать это снова через минуту или нет.

Смежные вопросы