如何在ApplescriptObjC / xcode中创建一个停止按钮?

时间:2014-03-08 19:55:13

标签: xcode cocoa applescript

我有一个循环很多的脚本。有时我需要手动停止它。它在applescript编辑器中运行正常,因为我可以点击停止,但如果这将是一个在xcode中制作的独立应用程序,那么我将如何创建一个停止按钮?我听说过有关线程的事情,但我还没理解。

让我说我的代码是:

on buttonClicked_(sender)
   repeat        
     say "help"
   end repeat
end buttonClicked_

单击按钮将是一个ui按钮,显示“run”

1 个答案:

答案 0 :(得分:1)

我不知道ApplescriptObjC,但是这里是如何在objective-c中完成的。我相信你可以弄清楚如何转换它。

线程化的想法是你的程序在主线程上运行。当您进入重复循环时,将占用所有应用程序资源,从而阻止主线程,因此在退出重复循环之前,您无法执行任何其他操作。因此,在后台线程上运行重复循环,因此主线程可以自由处理其他任务,例如按下按钮。

例如,假设您的界面上有一个按钮,并且代码中设置了BOOL变量。按下每个按钮,BOOL变为YES / NO。这是一个按钮方法。请注意,我们使用“detachNewThreadSelector”在后台线程上运行重复循环。

-(IBAction)buttonPress:(id)sender {
   if (theBool == YES) {
      theBool = NO;
      [sender setTitle:@"Start"];
   } else {
      theBool = YES;
      [sender setTitle:@"Stop"];
   }
   [NSThread detachNewThreadSelector:@selector(theMethod) toTarget:self withObject:nil];
}

这就是你的“后台线程”方法的样子。由于我不知道你是否使用ARC,它包含一个处理释放内存的自动释放池。主线程有一个自动但由于这是在后台线程,我们必须创建自己的。

-(void)theMethod {
   if (theBool == YES) {
      NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
      repeat
         if (theBool == NO) {
            exit repeat
         }
         say "help"
      end repeat
      [pool drain];
   }
}
祝你好运。