我编写了一个可以使用AppleScript编写脚本的应用程序。现在,我可以在AppleScript编辑器中编写下一本书:
tell application "My Magazines"
current magazine
end tell
它返回以下响应:
«class » "The NY Times" of application "My Magazines"
响应还可以。我可以提取它的属性,并使用在magazine
类中定义的方法。唯一困扰我的是«class »
,这不是人类可读的。我试图找到我需要重写的方法,以便为用户提供对该方法的更好描述,但是找不到。
有没有我可以覆盖替换的方法«class » "The NY Times"
有什么样Magazine "The NY Times"
?
magazine
在我的sdef文件中定义如下:
<class name="magazine" code="sMAG" description="A particular magazine">
<cocoa class="MyMagazine" />
<property name="name" code="pnam" type="text" access="r" description="Title of it">
<cocoa key="name" />
</property>
</class>
该类本身定义为:
@interface MyMagazine : NSObject
{
NSString *name;
}
@property (nonatomic, readonly) NSString *name;
@end
并实现为:
@implementation MyMagazine
@synthesize name;
- (NSScriptObjectSpecifier *)objectSpecifier
{
MyMagazinesList *list = [MyMagazinesList sharedList];
return [[[NSNameSpecifier alloc] initWithContainerClassDescription:(NSScriptClassDescription *)[[list objectSpecifier] keyClassDescription]
containerSpecifier:[list objectSpecifier]
key:@"magazines"
name:name] autorelease];
}
您的sdef片段未显示您如何定义“当前杂志”一词。确保该部分正确至关重要。它看起来应该像这样:
<suite name=...>
<class name="magazine" code="sMAG" ...>
<cocoa class="MyMagazine" />
<property name="name" code="pnam" type="text" access="r" ...>
<cocoa key="name" />
</property>
</class>
<class name="application" ...>
<cocoa class="MyApplication"/>
<property name="current magazine" code="cMAG" type="magazine" access="r">
<cocoa key="currentMagazine"/>
</property>
MyApplication.h应该有一个
@property MyMagazine *currentMagazine;
最后,MyMagazine.m需要一个-objectSpecifier,它将MyMagazine *(当使用该方法时将是self)转换为该杂志的NSScriptObjectSpecifier,该杂志的容器是应用程序对象(而不是当前杂志可能位于的内部列表) )。例如:
- (NSScriptObjectSpecifier *)objectSpecifier
{
NSScriptClassDescription *containerClassDesc = (NSScriptClassDescription *)
[NSScriptClassDescription classDescriptionForClass:[NSApp class]];
return [[[NSNameSpecifier alloc]
initWithContainerClassDescription:containerClassDesc
containerSpecifier:nil
key:@"magazine"
name:self.name]];
}
在AppleScript中访问后,您应该会看到例如
tell application "My Magazines" to get current magazine
--> magazine "New York Times" of application "My Magazines"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句