Sto provando ad eseguire un blocco di codice 2 secondi dopo che l'ho 'avviato'.iphone NStimer start in 2 secondi
Penso che il NSTimer possa farlo ma non riesca a capirlo.
Sto provando ad eseguire un blocco di codice 2 secondi dopo che l'ho 'avviato'.iphone NStimer start in 2 secondi
Penso che il NSTimer possa farlo ma non riesca a capirlo.
Di seguito vi do quello che ti serve:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:NO];
Poi la funzione di delegato:
-(void)handleTimer: (NSTimer *) timer
{
//code
}
Dovresti essere in grado di impostare lo NSTimeInterval
in 2,0 secondi e dovrebbe attivarsi dopo tale intervallo di tempo. Cosa stai vedendo? Qual è il codice che stai utilizzando per richiamare il timer?
NSTimer può essere utilizzato, ma un'altra opzione è quella di utilizzare performSelector:withObject:afterDelay: E 'fondamentalmente come una chiamata di metodo (messaggio di invio) che succede dopo.
Questo esempio inviare un doStuff: messaggio dopo un ritardo:
[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];
che fa sì che questo metodo per ottenere invocato 2.0 secondi più tardi:
-(void)doStuff:(id)sender
{
/// do something
}
È anche possibile utilizzare un codice a portata di mano:
NSObject + PerformBlock.h
@interface NSObject (PerformBlock)
- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait;
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay;
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval;
@end
NSObject + PerformBlock.m
@interface NSObject (PerformBlockHidden)
- (void)performBlock:(void(^)(void))block;
@end
@implementation NSObject (PerformBlock)
- (void)performBlock:(void(^)(void))block {
block();
}
- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait {
[self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait];
}
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay {
[self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay];
}
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval {
for (NSInteger repetition = 0; repetition < repeatCount; repetition++)
[self performBlock:block afterDelay:(repetition*timeInterval)];
}
@end
Poi basta importare NSObject + PerformBlock.h e chiamare:
[myObject performBlock:^{
// Code you want to perform after 2secs
} afterDelay:2];
Non ho usato questo, ma mi piace molto il concetto di utilizzare blocchi come questo . –