我正在开发适用于Mac OS X的应用程序。我的应用程序每10秒检查一次,如果条件为真,应用程序会发送Growl通知。
我已经编写了Growl通知和检查。我只需要知道如何使这个检查每十秒重复一次,并且每次都发送通知,如果是,则全部在后台。
请写下确切的代码,因为我对Objective-C很新。谢谢:D
------------------------------- EDIT --------------- ---------------------
目前我正在使用它:
// 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];
}
@end
答案 0 :(得分:1)
您可以在此处找到您要查找的确切代码: Time Programming Topics
答案 1 :(得分:0)
-(void) sendGrowl { } // your growl method
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self
selector:@selector(sendGrowl) userInfo:nil repeats:YES];
完成定时器调用[timer invalidate]
后。粘贴到XCode并按住Alt并单击它以阅读文档。
答案 2 :(得分:0)
要安排计时器每10秒运行一次,您需要:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 10.0
target: someObject
selector: @selector(fire:)
userInfo: someParameter
repeats: YES];
这将创建一个计时器并将其置于运行循环中,使其每10秒触发一次。当它触发时,它等同于以下方法调用:
[someObject fire: someParameter];
您可以将{n}传递给someParameter
,在这种情况下,您的选择器不需要参数,即-fire
而不是-fire:
。
要停止计时器,只需发送invalidate
消息。
[timer invalidate];
计时器需要运行循环才能工作。如果你在应用程序的主线程上运行它,这很好,因为主线程已经有一个运行循环(它处理UI事件并将它们传递给你的动作)。如果您希望计时器在另一个线程上触发,则必须在该不同的线程上创建并运行一个运行循环。这是一个更高级的,所以鉴于你是Objective-C的新手,现在就避开它。
修改强>
看过你要做的事情,调度计时器的第一个代码需要替换整个while循环。 -fire
方法看起来像:
-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...
}