Applescript-able应用程序&可可问题

时间:2012-04-05 11:27:33

标签: objective-c cocoa scripting applescript sdef

我首先要说的是,就AppleScript来说,我是一个完整的新手。所以在这里......

这是我到目前为止所做的:

  • 研究了SimpleScripting
  • 的苹果参考资料
  • 实施了IDENTICAL .sdef文件
  • 设置新属性myname
  • 将主要课程(info.plist)设置为ppApplication(我的主要课程继承自NSApplication
  • 设置myname属性
  • 的访问者

我的sdef文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
<dictionary xmlns:xi="http://www.w3.org/2003/XInclude">
    <xi:include href="file:///System/Library/ScriptingDefinitions/CocoaStandard.sdef" xpointer="xpointer(/dictionary/suite)"/>
    <suite name="MyApplication Suite" code="PpRm" description="MyApplication Suite">
        <class name="application" code="capp" description="MyApplication&apos;s top-level scripting object." inherits="application">
            <cocoa class="ppApplication"/>
            <property name="myname" code="PEnm" description="The name of the application" type="text" access="r">
                <cocoa key="myname"/>
            </property>
        </class>
    </suite>
</dictionary>

我的ppApplication类:

#import <Foundation/Foundation.h>

#import "ppCore.h"

@interface ppApplication : NSApplication {
    ppCore* core;
}

@property (assign) ppCore* core;

@property (readonly) NSString* myname;

@end

#import "ppApplication.h"

@implementation ppApplication

@synthesize core;

- (void)awakeFromNib
{
    [self setCore:[[ppCore alloc] init]];
}

/*******************************************************
 *
 * APPLESCRIPT SUPPORT
 *
 *******************************************************/

- (NSString*)myname
{
    return @"DONE";
}

@end

现在,问题在于:

当我尝试运行以下脚本时(在 AppleScript编辑器中)

tell application "myApplication"
     myname
end tell

我收到the variable myname is not defined错误。

但是:

如果我回到Xcode,Build Settings并将产品名称改为 - 比如myApplicationX并重新编译,那么上面的代码(将其更改为tell application "myApplicationX")就可以了。< /强>

那么,我做错了什么? AppleScript编辑器是否可能不与我的应用程序的活动编译“对话”,而是与之前的编译器“对话”?如果不更改我的产品名称,我该如何处理?

1 个答案:

答案 0 :(得分:2)

以上代码没有问题。

只需重新启动AppleScript编辑器(在对应用程序进行任何重大更改后)就可以了。