我正在尝试编写一个简单的 Objective-C 应用程序:我只想要一个在状态栏中显示一个单词并允许通过 AppleScript 更新该单词的应用程序。老实说,我对 AppleScript 知之甚少,对 Objective-C 也一无所知。但是,这并不难,因为我只花了 2 个小时就获得了一个菜单栏应用程序,该应用程序具有菜单项并响应诸如“退出”之类的核心 AppleScript 命令,所以我已经完成了 95% 的工作。不幸的是,我花了接下来的 6 个小时试图找到一种方法来为这个应用程序提供一个我可以通过 AppleScript 获取和设置的简单属性。
这是我的 .h 代码:
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
@property (assign) IBOutlet NSWindow *window;
- (NSString*) foobaz;
@end
该foobaz
方法是我用来尝试创建可读属性的方法(*window
是 XCode 提供的样板文件的一部分,与手头的问题无关)。这是我的 .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="StatusMenuApp suite" code="smas"
description="StatusMenuApp specific classes.">
<class name="application" code="smaa" inhereits="application"
description="Application object.">
<cocoa class="AppDelegate"/>
<property name="foobaz" code="smas" type="text" access="r"/>
</class>
</suite>
</dictionary>
所以我已经像 Apple 的 SimpleScripting 示例一样设置了它:https ://developer.apple.com/library/mac/#samplecode/SimpleScripting/Introduction/Intro.html
但是,我尝试在脚本编辑器中运行它:
tell application "StautsMenuApp"
properties
end tell
而且我只是得到一个核心属性的列表,没有提及foobaz
任何内容,这与 Apple 的示例不同,其中自定义属性在我运行时出现在核心属性旁边。
我觉得我已经尝试了一百种变体并阅读了一百个示例,但无法使任何工作。任何帮助表示赞赏。