Возврат типа записи в applecript (из объектива-C)
Я пытаюсь вернуть запись на appleScript. Текущее решение состоит в том, чтобы вернуть NSDictionary и определить тип записи (возвращаемое значение Lyx) в файле sdef, но это не работает - должен ли я создать конкретный объект AppleScript?
Вот файл sdef
<!-- our special scripting suite for this example -->
<suite name="Lyx" code="LYX " description="LyX scripting facilities.">
<record-type name="LyX return value" code="LyxR">
<property name="code" code="code" type="integer"
description="Error code (0 in case of success).">
<cocoa key="code"/>
</property>
<property name="message" code="mess" type="text"
description="The returned message.">
<cocoa key="message"/>
</property>
</record-type>
<command name="run" code="SLyxComm" description="run a simple command with one parameter">
<cocoa class="LyxCommand"/>
<direct-parameter description="The command to be executed.">
<type type="text" list="no"/>
</direct-parameter>
<parameter name="with argument" code="args" type="text">
<cocoa key="arg"/>
</parameter>
<result type="LyX return value" description="Contains a code (0 for success) and the message returned by LyX"/>
</command>
</suite>
и вот код объективного C
@interface LyxCommand : NSScriptCommand {
}
- (id)performDefaultImplementation;
@end
@implementation LyxCommand
- (id)performDefaultImplementation {
// Get the command and argument
NSDictionary * theArguments = [self evaluatedArguments];
NSString * directParameter = [self directParameter];
NSString *arg = [theArguments objectForKey: @"arg"];
// Execute the command
LyXFunctionResult result = applescript_execute_command([directParameter UTF8String], [arg UTF8String]);
// Construct the result record
NSString *message = [NSString stringWithCString:result.message encoding:NSUTF8StringEncoding];
free(result.message);
NSDictionary *objcResult = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:result.code], @"code", message, @"message", nil];
return objcResult;
}
@end
Когда я попробую это простое приложение
tell application "LyX-2.1-qt4"
set x to (run "server-get-filename" with argument "")
end tell
message of x
сообщение об ошибке: error "Can’t get message of {message:\"\", code:0}." number -1728 from message of {«class mess»:"", «class code»:0}
,
1 ответ
С sdef и его реализацией все в порядке, однако терминология, которую вы определили в sdef, НЕ доступна за пределами блока сообщения AppleScript. Ваш сценарий должен быть:
tell application "LyX-2.1-qt4"
set x to (run "server-get-filename" with argument "")
message of x
end tell
или, если вам действительно нужно сообщение вне блока Tell по какой-то причине:
set msg to missing value
tell application "LyX-2.1-qt4"
set x to (run "server-get-filename" with argument "")
set msg to message of x
end tell
log msg