Сценарии информации о версии моста

Этот документ касается новой и обновленной информации для Сценариев Моста. Концептуальная и справочная информация раньше в этом документе была перемещена в Сценарии Руководства по программированию Моста.

Содержание:

10.6 Изменения

Обработка ошибок

Методы экземпляра в Сценариях Моста отправляют события Apple в целевое приложение, которое может перестать работать для множества различных причин, многих из них не обнаруживаемый заранее. В предыдущих версиях, Пишущий сценарий Моста обработал отказавшие события путем вызова метода делегата eventDidFail:withError:, реализация по умолчанию которого выдала исключение. Это отразило использование AppleScript, но в Какао, исключения резервируются для программных ошибок, не ошибок периода выполнения. Поэтому OS X v10.6 изменяет протокол обработки ошибок. Когда событие перестало работать, NSError объект будет присоединен к экземпляру SBObject, отправившему событие, которое можно получить использование нового -lastError метод:

@interface SBObject (ErrorHandling10_6)
- (NSError *) lastError;
@end

Если программа установит объект делегата, то ее вызовут после установки lastError, и инициирующий метод возвратится nil или 0 в зависимости от его типа возврата.

Поскольку ошибка только присоединена к экземпляру, отправившему событие, объединенные в цепочку выражения должны будут быть переписаны, если Вы захотите сообщить об ошибках. Рассмотрите попытка получить имя текущей дорожки в iTunes, который перестанет работать, если не будет никакой текущей дорожки. Вы могли записать это наивно, игнорируя ошибку:

iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
name = [[iTunes currentTrack] name];
if (name) NSLog(@"current track is %@", name);

Это работает, потому что name возвратится nil при отказе, но ошибке был эффективно потерян, потому что это было присоединено к временному объекту, возвращенному [iTunes currentTrack]. Для достигания ошибки необходимо было бы переписать код немного для содержания ссылки на промежуточный SBObject, показанный сюда использование track:

iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
track = [iTunes currentTrack];
name = [track name];
if (name)
    NSLog(@"current track is %@", name);
else {
    NSError *error = [track lastError];
    NSLog(@"couldn't get current track because %@", [error localizedDescription]);
}

Обработка предиката

-[SBElementArray filteredArrayUsingPredicate:] непосредственно не поддерживает все NSPredicate может сделать, потому что это должно превратить предикат в событие Apple, имеющее меньше функций. В предыдущих версиях, если это получило предикат, который не мог бы быть представлен как событие Apple, оно отступит к -[NSArray filteredArrayUsingPredicate:]. Однако это дало противоречивые результаты: в зависимости от предиката это могло бы возвратить любого NSArray или SBElementArray, и производительность могла дико отличаться.

В v10.6, -[SBElementArray filteredArrayUsingPredicate:] приведет к сбою за исключением, если дали предикат, который оно не может обработать. Если Вы не можете переписать предикат без неподдерживаемых битов, можно эмулировать старое поведение при помощи -get получить NSArray, и затем использовать -filteredArrayUsingPredicate: на этом:

filtered = [[SomeApp someObjects] get] filteredArrayUsingPredicate:complexPredicate];

Для лучшей производительности выделите части это SBElementArray может обработать в другой предикат и фильтр, что сначала, таким образом, второй предикат должен будет исследовать меньше объектов:

firstPass = [[[SomeApp someObjects] filteredArrayUsingPredicate:simpleBits] get];
filtered = [firstPass filteredArrayUsingPredicate:complexBits];

Для совместимости приложения, соединенные на OS X v10.5, все еще получат старое поведение. Для Моста Сценариев использования сценариев через мост Objective C, такой как PyObjC или RubyCocoa, соответствующее «приложение» является интерпретатором. Если интерпретатор был основан на OS X v10.6, как python(1) и ruby(1) тогда сценарий получает новое поведение.

Исправления ошибок и улучшения

NSDictionary-AERecord перевод теперь обрабатывает определяемые пользователем ключи (в противоположность ключам, определенным интерфейсом сценариев приложения). [5525649]

-[SBElementArray addObject:] теперь работы лучше с приложениями некакао. [5585347]

Были фиксированы много утечек памяти. [5856221]

Сценарии Моста больше не распечатывают предупреждения об уродливых интерфейсах сценариев при создании SBApplication объект. [5964420]

sdp(1) улучшил сообщения об ошибках и отмечает предупреждающие сообщения как предупреждения. [5649633]

10.5.6 Изменения

Специализированные методы тот возврат BOOL теперь работайте правильно над системами PowerPC. [5525649]

Потокобезопасность

Используя многократные потоки со Сценариями Моста может дать воспринятые или фактические преимущества производительности. В частности удаленное приложение может требовать времени для ответа на сообщение, и приложение должно остаться быстро реагирующим к вводу данных пользователем, в то время как это ожидает. Сценарии Моста могут использоваться с многократными потоками учитывая несколько инструкций.

Эта информация применяется ко всем версиям Сценариев Моста.