2014-02-01 2 views
0

Я новичок в сценарии Apple, но имею многолетний опыт работы в Objective-C для iOS. Мне нравится использовать классы Cocoa в пакете AppleScript. Но я не понимаю, как я могу подклассифицировать класс Cocoa. Например, я пишу в своем AppleScript расслоении «testLib»:Как наследовать класс Cocoa в скрипте

script Car 
property parent : class "NSObject" 

on workWithCar() 
    log me's retainCount() as integer 

end workWithCar 

end script 

Но когда я пытаюсь использовать его в AppleScript я получаю сообщение об ошибке:

set carObj to Car of script "testLib" 
carObj's workWithCar() -- script Car doesn't understand retainCount message (sorry I have localized text and I don't understand how it looks like in English) 

Это означает, что мой автомобиль не является реальным Подкласс NSObject. Но если я создаю какао приложение Apple Script в Xcode

script AppDelegate 
property parent : class "NSObject" 

on applicationWillFinishLaunching_(aNotification) 
    log me's retainCount() as integer -- returns 1 
end applicationWillFinishLaunching_ 

end AppDelegate 

Я позабочусь 1. Там я могу получить доступ к методам всех NSObject, я думаю, что Apple, делает некоторые магические трансформации, когда он unarchives объектов из XIb. Могу ли я получить такой же эффект в коде в своем наборе AppleScript?

ответ

0

Похоже, вы пытаетесь создать простую библиотеку скриптов без терминологии.

(поправьте меня, если я ошибаюсь)

Вот пример простой библиотеки сценария:

on transform(sourceText, caseIndicator) 
    set validCaseType to {"upper case", "lower case", "word case"} 
    if caseIndicator is in validCaseType then 
     -- create a Cocoa string from the passed text 
     set the sourceString to current application's NSString's stringWithString:sourceText 
     -- apply the indicated transformation to the Cocoa string 
     if the caseIndicator is "upper case" then 
      set the adjustedString to sourceString's uppercaseString() 
     else if the caseIndicator is "lower case" then 
      set the adjustedString to sourceString's lowercaseString() 
     else if the caseIndicator is "word case" then 
      set the adjustedString to sourceString's capitalizedString() 
     end if 
     -- convert from Cocoa string to AppleScript text 
     return (adjustedString as text) 

    else 
     set errStr to caseIndicator & " is not valid case indicator" as text 
     error errStr 

    end if 

end transform 

Сохранить как пакет сценариев. И в одной из папок библиотеки сценариев.

Я использовал Пользователей один. ~/Library/Script Libraries/. Если он не существует, просто создайте его.

Ваших приложения могут иметь свои собственные библиотеки Script

Затем откройте содержимый ящик Bundle Script и проверьте:

Applescript/Objective - C Библиотека флажка

 bundle drawer

Сохраните файл еще раз, чтобы установить изменения.

Теперь в обычном Applescript вы можете бежать.

tell script "test" 
    set the adjustedText to transform("the cat", "upper case") 

end tell 

Это возвращает -> "КОТ"


Зная это значит использовать свой код.

Сценарий Библиотека Bundle будет называться "тест" и код:

-- Not needed here --> property parent : class "NSObject" 


on workWithCar() 
    log me's retainCount() as integer 

end workWithCar 

Нормальный Applescript будет:

tell script "test" 
    set the theCar to workWithCar() 
end tell 

возвращается ->*1*

+0

Да, я хочу создать библиотеку скриптов. Ваш ответ показал мне, что библиотека скриптов представлена ​​как подкласс NSObject. Я не знал этого раньше, спасибо. Но как насчет других классов?Могу ли я подклассифицировать NSWindowController или любые другие классы Cocoa и переопределить его методы, например? – Alexey

+0

Если честно. Я не уверен. С какой целью вы хотели бы это сделать? – markhunte

+0

Я просто хочу работать с пользовательским интерфейсом в своей библиотеке скриптов. Я хочу создать окно и поместить в него webView, но webview можно создать только в основном потоке. И я решил, что могу это сделать в windowDidLoad NSWindowController. Я могу создать NSWindow и показать его, но без подкласса NSWindowController Я не могу получить полный контроль над окном. – Alexey

Смежные вопросы