nrj*_*nrj 6 cocoa applescript objective-c
我正在尝试为我编写的Cocoa应用程序添加一些脚本功能.我为我的项目创建了一个sdef(脚本定义文件).到目前为止,我已经成功地使用AppleScript访问对象子元素(元素),但我不能在生活中找出如何调用方法(命令).
这是我的sdef文件.
<suite name="mySuite" code="mSUI" description="My Application Suite">
<class name="application" code="capp" description="Top level scripting object.">
<cocoa class="NSApplication"/>
<!-- I can access these elements fine -->
<element description="Test children." type="child" access="r">
<cocoa key="myChildren"/>
</element>
<!-- Cannot seem to call this method :( -->
<responds-to command="testmethod">
<cocoa method="exposedMethod:"/>
</responds-to>
</class>
<class name="child" code="cHIL" description="A Child." plural="children">
<cocoa class="Child"/>
<property name="name" code="pnam" description="The child name." type="text" access="r">
<cocoa key="name"/>
</property>
</class>
<command name="testmethod" code="tEST" description="Execute the test method" />
</suite>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器类实现(这是我的应用程序的委托)
MyController.h
#import <Cocoa/Cocoa.h>
@interface MyController : NSObject {
NSMutableArray* myChildren;
}
// Some Methods
@end
Run Code Online (Sandbox Code Playgroud)
+ myController的Scripting.m
#import "MyController+Scripting.h"
@implementation MyController (Scripting)
// This works when I'm accessing the myChildren
- (BOOL)application:(NSApplication*)sender delegateHandlesKey:(NSString*)key {
NSLog(@"Key = %@", key);
return ([key isEqualToString:@"myChildren"]);
}
// This does NOT work...
- (void)exposedMethod:(NSScriptCommand*)command {
NSLog(@"Invoked Test Script Method %@", [command description]);
}
@end
Run Code Online (Sandbox Code Playgroud)
最后,我正在尝试的AppleScript是:
tell application "MyApplication"
testmethod
end tell
Run Code Online (Sandbox Code Playgroud)
响应 "AppleScript Error - The variable testmethod is not defined."
我在这里做错了什么想法?我觉得我错过了一些简单的东西,但我的谷歌搜索似乎没有出现任何有用的东西.
(实际上,我从来没有在 Cocoa 应用程序中添加过可编写脚本的功能,所以我对此持保留态度。)
我猜测的第一件事是它exposedMethod:需要一个参数,但我没有看到在 sdef 或 AppleScript 中可能指定的位置。事实上,AppleScript 看起来像是testmethod一个变量,而不是一个命令。(也许它应该是类似“ testmethod with ...”的东西?)您可能需要在 sdef 中为命令定义一个<parameter>or元素。<direct-parameter>
另外,您不需要一个对象来调用该方法吗?由于您的控制器是应用程序委托,我不确定其中的复杂性,但 AppleScript 可能会尝试testMethod:在 NSApplication 而不是您的委托上调用?
我猜您已经看过 Apple 的示例代码和其他资源,但如果没有,这里有一些可能有帮助的链接:
祝你好运!
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |