diff options
author | Eddie Ehlin <eddiex@eddiex.se> | 2013-01-21 22:37:24 +0100 |
---|---|---|
committer | Eddie Ehlin <eddiex@eddiex.se> | 2013-01-21 22:37:24 +0100 |
commit | b36ffa25882b548c800ee609965196ef3332e9c4 (patch) | |
tree | 2c560657f6e5ffb444c7d160cadf908427be60a2 | |
parent | d40cafee461021e9a10e4698196e14720cb50c21 (diff) | |
download | iBean-b36ffa25882b548c800ee609965196ef3332e9c4.tar.gz iBean-b36ffa25882b548c800ee609965196ef3332e9c4.zip |
Implemented core timer support and InstantExtraction is now using it.
-rw-r--r-- | iBean/iBean.xcodeproj/project.xcworkspace/xcuserdata/eddiex.xcuserdatad/UserInterfaceState.xcuserstate | bin | 36973 -> 37321 bytes | |||
-rw-r--r-- | iBean/iBean.xcodeproj/xcuserdata/eddiex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist | 54 | ||||
-rw-r--r-- | iBean/iBean/AppDelegate+Storage.h | 5 | ||||
-rw-r--r-- | iBean/iBean/AppDelegate+Storage.m | 41 | ||||
-rw-r--r-- | iBean/iBean/AppDelegate.h | 3 | ||||
-rw-r--r-- | iBean/iBean/InstantExtractionViewController.h | 2 | ||||
-rw-r--r-- | iBean/iBean/InstantExtractionViewController.m | 22 |
7 files changed, 118 insertions, 9 deletions
diff --git a/iBean/iBean.xcodeproj/project.xcworkspace/xcuserdata/eddiex.xcuserdatad/UserInterfaceState.xcuserstate b/iBean/iBean.xcodeproj/project.xcworkspace/xcuserdata/eddiex.xcuserdatad/UserInterfaceState.xcuserstate Binary files differindex 863f4fe..7208623 100644 --- a/iBean/iBean.xcodeproj/project.xcworkspace/xcuserdata/eddiex.xcuserdatad/UserInterfaceState.xcuserstate +++ b/iBean/iBean.xcodeproj/project.xcworkspace/xcuserdata/eddiex.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/iBean/iBean.xcodeproj/xcuserdata/eddiex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/iBean/iBean.xcodeproj/xcuserdata/eddiex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 05301bc..e8320d9 100644 --- a/iBean/iBean.xcodeproj/xcuserdata/eddiex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/iBean/iBean.xcodeproj/xcuserdata/eddiex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -2,4 +2,58 @@ <Bucket type = "1" version = "1.0"> + <FileBreakpoints> + <FileBreakpoint + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "iBean/InstantExtractionViewController.m" + timestampString = "380496617.591403" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "113" + endingLineNumber = "113" + landmarkName = "-startExtraction:" + landmarkType = "5"> + </FileBreakpoint> + <FileBreakpoint + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "iBean/InstantExtractionViewController.m" + timestampString = "380494622.652202" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "88" + endingLineNumber = "88" + landmarkName = "-haltExtractionTimer" + landmarkType = "5"> + </FileBreakpoint> + <FileBreakpoint + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "iBean/InstantExtractionViewController.m" + timestampString = "380496617.591403" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "99" + endingLineNumber = "99" + landmarkName = "-timerInterrupted" + landmarkType = "5"> + </FileBreakpoint> + <FileBreakpoint + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "iBean/AppDelegate+Storage.m" + timestampString = "380496246.739132" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "164" + endingLineNumber = "164" + landmarkName = "-createTimer::::" + landmarkType = "5"> + </FileBreakpoint> + </FileBreakpoints> </Bucket> diff --git a/iBean/iBean/AppDelegate+Storage.h b/iBean/iBean/AppDelegate+Storage.h index bec63e0..f444572 100644 --- a/iBean/iBean/AppDelegate+Storage.h +++ b/iBean/iBean/AppDelegate+Storage.h @@ -33,4 +33,9 @@ - (BeanCollection*) createBeanCollection; - (Bean*) createBean; +#pragma mark - iBean timer methods +- (NSTimer*) getTimer; +- (NSTimer*) createTimer:(id) callbackTarget: (SEL) selector: (id)userInfo: (BOOL)repeats; +- (void) haltTimer: (BOOL)interrupt; + @end diff --git a/iBean/iBean/AppDelegate+Storage.m b/iBean/iBean/AppDelegate+Storage.m index 5668bd5..4532397 100644 --- a/iBean/iBean/AppDelegate+Storage.m +++ b/iBean/iBean/AppDelegate+Storage.m @@ -153,6 +153,47 @@ return b; } +#pragma mark - iBean timer related methods +- (NSTimer*) getTimer +{ + return self.timer; +} + +- (NSTimer*) createTimer:(id) callbackTarget: (SEL) selector: (id)userInfo: (BOOL)repeats +{ + if (self.timer != nil) + { + BOOL interruptCallbackTarget = self.timerCallbackTarget != callbackTarget; + [self haltTimer: interruptCallbackTarget]; + } + + self.timerCallbackTarget = callbackTarget; + self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:callbackTarget selector:selector userInfo:userInfo repeats:repeats]; + + return self.timer; +} + + +- (void) haltTimer: (BOOL) interrupt +{ + if (self.timer != nil) + { + [self.timer invalidate]; + self.timer = nil; + + if (self.timerCallbackTarget != nil && interrupt == YES) + { + //Must call the target to notify that it's timer has been interrupted... + //First we must make sure that target has implemented timerInterrupted method. + if ([self.timerCallbackTarget respondsToSelector:@selector(timerInterrupted)]) + { + [self.timerCallbackTarget performSelector:@selector(timerInterrupted)]; + } + } + } +} + + @end diff --git a/iBean/iBean/AppDelegate.h b/iBean/iBean/AppDelegate.h index 40084d5..b09db3e 100644 --- a/iBean/iBean/AppDelegate.h +++ b/iBean/iBean/AppDelegate.h @@ -12,6 +12,9 @@ @property (strong, nonatomic) UIWindow *window; +@property (nonatomic, strong) id timerCallbackTarget; +@property (nonatomic, strong) NSTimer *timer; + @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; diff --git a/iBean/iBean/InstantExtractionViewController.h b/iBean/iBean/InstantExtractionViewController.h index e8ec739..4fded92 100644 --- a/iBean/iBean/InstantExtractionViewController.h +++ b/iBean/iBean/InstantExtractionViewController.h @@ -12,7 +12,6 @@ @interface InstantExtractionViewController : UIViewController @property (nonatomic, assign) double extractionProgress; -@property (nonatomic, strong) NSTimer* timer; @property (nonatomic, strong) Configuration *configuration; /* Utility methods */ @@ -20,6 +19,7 @@ - (void) updateExtractionSettingLabel; - (void) updateExtractionProgressLabel; - (void) haltExtractionTimer; +- (void) timerInterrupted; /* UI Outlets */ @property (weak, nonatomic) IBOutlet UILabel *extractionSettingLabel; diff --git a/iBean/iBean/InstantExtractionViewController.m b/iBean/iBean/InstantExtractionViewController.m index 699d2c8..3c53faa 100644 --- a/iBean/iBean/InstantExtractionViewController.m +++ b/iBean/iBean/InstantExtractionViewController.m @@ -85,17 +85,24 @@ - (void) haltExtractionTimer { - if (self.timer != nil) + if ([(AppDelegate*) [[UIApplication sharedApplication] delegate] getTimer] != nil) { - [self.timer invalidate]; - self.timer = nil; + [(AppDelegate*) [[UIApplication sharedApplication] delegate] haltTimer:NO]; //Return UI to "Start extraction" state. - [self.extractionButton setTitle:@"Start extraction" forState:UIControlStateNormal]; - [self.extractionSettingStepper setEnabled:YES]; + [self timerInterrupted]; } } +- (void) timerInterrupted +{ + NSLog(@"InstantExtractionViewController - timerInterrupted"); + + //Return UI to "Start extraction" state. + [self.extractionButton setTitle:@"Start extraction" forState:UIControlStateNormal]; + [self.extractionSettingStepper setEnabled:YES]; +} + /***************************************************** UI Actions *****************************************************/ @@ -103,14 +110,13 @@ - (IBAction)startExtraction:(id)sender { //Extraction in progress? - if (self.timer == nil) + if ([(AppDelegate*) [[UIApplication sharedApplication] delegate] getTimer] == nil) { self.extractionProgress = 0.0f; [self.extractionButton setTitle:@"Stop extraction" forState:UIControlStateNormal]; [self.extractionSettingStepper setEnabled:NO]; - self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(updateExtractionProgressLabel) userInfo:nil repeats:YES]; - + [(AppDelegate*) [[UIApplication sharedApplication] delegate] createTimer:self :@selector(updateExtractionProgressLabel) :nil :YES]; } else { |