Advertisement
Guest User

Untitled

a guest
Oct 6th, 2011
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define kOffset 0.05
  2. #define kTolerance 0.025
  3.  
  4.  
  5. @interface NSDate (Additions)
  6.  
  7. + (NSDate *)nextFullMinuteDate;
  8.  
  9. @end
  10.  
  11.  
  12. @implementation NSDate (Additions)
  13.  
  14. + (NSDate *)nextFullMinuteDate {
  15.    
  16.     NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
  17.                                     fromDate:[NSDate date]];
  18.     [components setSecond:0];
  19.     [components setMinute:[components minute] + 1];
  20.    
  21.     return [[NSCalendar currentCalendar] dateFromComponents:components];
  22. }
  23.  
  24. @end
  25.  
  26.  
  27. @interface MinuteTimer : NSObject {
  28.     NSTimer *timer;
  29.     SEL selector;
  30.     id target;
  31.     id userInfo;
  32. }
  33.  
  34. @property (nonatomic, retain) NSTimer *timer;
  35. @property (nonatomic, assign) SEL selector;
  36. @property (nonatomic, assign) id target;
  37. @property (nonatomic, assign) id userInfo;
  38.  
  39. - (void)resetTimer;
  40. - (id)initWithTarget:(id)target
  41.             selector:(SEL)aSelector
  42.             userInfo:(id)userInfo;
  43.  
  44. @end
  45.  
  46.  
  47. @implementation MinuteTimer
  48.  
  49. @synthesize timer;
  50. @synthesize selector;
  51. @synthesize target;
  52. @synthesize userInfo;
  53.  
  54. - (id)initWithTarget:(id)aTarget
  55.               selector:(SEL)aSelector
  56.               userInfo:(id)someUserInfo {
  57.    
  58.     self = [super init];
  59.    
  60.     if (self) {
  61.        
  62.         [self setTarget:aTarget];
  63.         [self setSelector:aSelector];
  64.         [self setUserInfo:someUserInfo];
  65.        
  66.         [self resetTimer];
  67.     }
  68.    
  69.     return self;
  70. }
  71.  
  72.  
  73. - (void)performAction:(NSTimer *)aTimer {
  74.    
  75.     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
  76.     timeInterval -= (NSInteger)timeInterval;
  77.    
  78.     if (timeInterval < kTolerance)
  79.         [self resetTimer];
  80.    
  81.     [target performSelector:selector
  82.                    onThread:[NSThread currentThread]
  83.                  withObject:userInfo
  84.               waitUntilDone:YES];
  85. }
  86.  
  87.  
  88. - (void)resetTimer {
  89.    
  90.     NSTimeInterval timeInterval = [[NSDate nextFullMinuteDate] timeIntervalSince1970];
  91.     timeInterval += kOffset;
  92.    
  93.     NSTimer *newTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]
  94.                                                  interval:60.0
  95.                                                    target:self
  96.                                                  selector:@selector(performAction:)
  97.                                                  userInfo:userInfo
  98.                                                   repeats:YES];
  99.    
  100.     [self setTimer:newTimer];
  101.     [newTimer release];
  102. }
  103.  
  104.  
  105. - (void)setTimer:(NSTimer *)newTimer {
  106.    
  107.     [timer invalidate];
  108.     [timer release];
  109.     timer = newTimer;
  110.     [timer retain];
  111.    
  112.     [[NSRunLoop currentRunLoop] addTimer:timer
  113.                                  forMode:NSDefaultRunLoopMode];
  114. }
  115.  
  116.  
  117. @end
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement