gpt4 book ai didi

objective-c - AppleScript 编辑器中显示的 AppleScript 类名

转载 作者:行者123 更新时间:2023-12-03 17:21:39 25 4
gpt4 key购买 nike

我编写了一个可以使用 AppleScript 编写脚本的应用程序。现在我可以在 AppleScript 编辑器中编写接下来的内容:

tell application "My Magazines"
current magazine
end tell

它返回以下响应:

«class » "The NY Times" of application "My Magazines"

react 还可以。我可以提取它的属性并使用 magazine 类中定义的方法。唯一让我困扰的是 ,它不太适合人类阅读。我试图找到需要重写的方法,以便为用户提供更好的方法描述,但找不到。

是否有一种方法可以重写,以将«class »“纽约时报”替换为杂志“纽约时报”

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"

关于objective-c - AppleScript 编辑器中显示的 AppleScript 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com