有人能指出我这个工作的一个例子。我只想通过AppleScript设置属性值。我已经浏览了所有可编写脚本的示例,这些示例的设置方式不同。
<?xml version="1.0" encoding="UTF-8"?>
<dictionary title="">
<suite name="Circle View Scripting" code="bccS" description="Commands and classes for Circle View Scripting">
<class name="application" code="capp" description="" >
<cocoa class="NSApplication"/>
<property name="circletext" code="crtx" type="text" description="The text that gets spun into a circle">
<cocoa key="circleText"/>
</property>
<property name="myint" code="crmy" type="integer" description="The text that gets spun into a circle">
<cocoa key="myInt"/>
</property>
</class>
</suite>
头文件:
// header
@interface MyDelegate : NSObject <NSApplicationDelegate>
{
WebScriptObject *scriptObject;
WebView *webView;
NSWindow *window;
NSInteger myInt;
}
// implementation
- (BOOL)application:(NSApplication*)sender delegateHandlesKey:(NSString*)key
{
return key isEqualToString:@"myInt"] || [key isEqualToString:@"circleText"];;
}
-(NSInteger)myInt
{
NSInteger myInteger = 42;
return myInteger;
}
-(void)setMyInt:(NSInteger*)newVal
{
// do nothing right now
NSLog(@"SETTER CALLED");
}
// Applescript尝试设置属性“myInt”
tell application "BrowserConfigClient"
set myint to 7
properties
end tell
最终,调用delegateHandlesKey方法,我能够返回属性的值,但永远不会调用setter。提前谢谢......
答案 0 :(得分:1)
您的方法声明有错误...
-(void)setMyInt:(NSInteger*)newVal
不应该有“*”,因为NSInteger不是“指针”变量。我在你的问题的评论中看到Ken Thomases已经告诉过你,所以一定要解决它。
因此,如果这不是您的问题,那么请查看您的sdef文件。我可以看到你没有关闭字典标签。你需要这个作为该文件的最后一行。
</dictionary>
我也将此作为我的sdef文件中的第二行......
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">