I'm working on an app for Mac OS X. My app checks something every ten seconds, and if the condition is true, the app sends a Growl notification.
I've already coded the Growl notifications and the checking. I just need to know how to make this checking repeat itself every ten seconds, and each time send a notification if true, all in the background.
Please write the exact code, as I am very new to Objective-C. Thank you :D
-------------------------------EDIT------------------------------------
Currently i'm using this:
// MyApp_AppDelegate.m
#import "MyApp_AppDelegate.h"
@implementation MyApp_AppDelegate
- (void)awakeFromNib {
return;
}
-(void)applicationDidFinishLaunching:(NSNotification*)aNotification {
// grwol:
NSBundle *myBundle = [NSBundle bundleForClass:[MyApp_AppDelegate class]];
NSString *growlPath = [[myBundle privateFrameworksPath] stringByAppendingPathComponent:@"Growl-WithInstaller.framework"];
NSBundle *growlBundle = [NSBundle bundleWithPath:growlPath];
#include <unistd.h>
int x = 0;
int l = 10; // time/repeats
int t = 10; //seconds
while ( x <= l ) {
// more code here only to determine sendgrowl value...
if(sendgrowl) {
if (growlBundle && [growlBundle load]) {
// more code to sends growl
} else {
NSLog(@"ERROR: Could not load Growl.framework");
}
}
// do other stuff that doesn't matter...
// wait:
sleep(t);
x++;
}
}
/* Dealloc method */
- (void) dealloc {
[super dealloc];
}
@en开发者_JAVA百科d
The exact code that you are looking for can be found here: Time Programming Topics
-(void) sendGrowl { } // your growl method
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self
selector:@selector(sendGrowl) userInfo:nil repeats:YES];
When you are done with the timer call [timer invalidate]
. Paste to XCode and alt+click it to read the docs.
To schedule a timer to run every 10 seconds, you need this:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 10.0
target: someObject
selector: @selector(fire:)
userInfo: someParameter
repeats: YES];
That will create a timer and put it on the run loop such that it fires every 10 seconds. When it fires, it is equivalent to the following method invocation:
[someObject fire: someParameter];
You are allowed to pass nil as someParameter
in which case your selector need not take a parameter i.e. it could be -fire
rather than -fire:
.
To stop a timer, simply send it the invalidate
message.
[timer invalidate];
Timers require a run loop to work. This is fine if you run it on the main thread of your application since the main thread already has a run loop (it's what handles UI events and passes them off to your actions). If you want the timer to fire on a different thread, you have to create and run a run loop on that different thread. This is a bit more advanced, so given you are new to Objective-C avoid it for now.
Edit
Having seen what you are trying to do, the first bit of code to schedule the timer needs to replace that entire while loop. The -fire
method would look something like:
-fire
{
// code here only to determine sendgrowl value...
if(sendgrowl)
{
if (growlBundle && [growlBundle load])
{
// more code to sends growl
}
else
{
NSLog(@"ERROR: Could not load Growl.framework");
}
}
// do other stuff that doesn't matter...
}
精彩评论