Как бы я написал следующий rb-appscript в objc-appscript? - PullRequest
0 голосов
/ 21 февраля 2010

Документация в appScript objc-trunk случайно использует ruby ​​в разделе «Проблемы с производительностью».

require "appscript"
include Appscript

desiredEmail = 'sam.brown@foo.com'

p app('Address Book').people[
        its.emails.value.contains(desiredEmail)
        ].name.get

Как бы это было написано в Objective-C? Я прошу прощения, если это кажется слишком простым вопросом, у меня 0 опыта работы с Ruby.

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 февраля 2010

Если вы запускаете скрипт ruby ​​и используете ASTranslate, он должен преобразовать необработанные команды appscript в Objc-appscript.

Edit01:

Я думаю, это будет выглядеть примерно так. Я не запустил инструмент, чтобы сделать клейкий код, поэтому я догадываюсь, как отображается имя приложения.

#import "AddressBookGlue.h" //Dont know the precise name 

AddressBookApplication *abApp=[[AddressBookApplication alloc] initWithName: @"Address Book.app"];

NSString *desiredEmail=@"sam.brown@foo.com"

NSString *returnedName= [[[[[[abApp people] emails] value] contains:desiredEmail] name] get]; 

По сути, он следует тем же правилам, которые Objectic-c использует при преобразовании из синтаксиса точек: везде, где есть точка в исходном синтаксисе, ожидайте скобку в Objective-C.

Я мог бы добавить, что если вы собираетесь делать много сценариев этого типа, было бы лучше потратить день или два на изучение основ ruby ​​или python. Работать с OSA в точечном синтаксисе намного проще, чем во вложенном. Просто глядя на все эти скобки в документации для Objc-appscript заставляет мои глаза слезиться.

1 голос
/ 25 февраля 2010

Извиняюсь за неполноту руководства objc-appscript, которое было изначально портировано из rb-appscript, как вы можете сказать. (FWIW, у меня должно быть время поработать над appscript этой весной.)

Перевод кода Ruby обратно в AppleScript в первую очередь, вероятно, самый простой подход:

tell application "Address Book"
   get name of every person where value of its email contains "hengist.podd@virgin.net"
end tell

Запуск через ASTranslate дает следующее:

#import "ABGlue/ABGlue.h"
ABApplication *addressBook = [ABApplication applicationWithName: @"Address Book"];
ABReference *ref = [[[addressBook people] byTest: [[[ABIts emails] value] contains: @"hengist.podd@virgin.net"]] name];
id result = [ref getItem];
0 голосов
/ 21 февраля 2010

Насколько я понимаю, это печать имени каждого человека, у которого есть электронная почта "sam.brown@foo.com".

Нет прямой связи с тем, как это сделать в Какао. К счастью для вас, адресная книга поддерживает скрипты, что означает, что вы можете использовать Scripting Bridge framework для взаимодействия с ней из приложения Cocoa.

На этой странице есть отличное объяснение того, как просто взаимодействовать с Mail.app через ScriptingBridge: http://robnapier.net/blog/scripting-bridge-265

Надеюсь, это даст вам достаточно информации, чтобы двигаться в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...