Автоматическое преобразование типов Javascript вызывает проблемы в моем сценарии Automator iPhone - PullRequest
0 голосов
/ 27 марта 2012

Я новичок в JavaScript. В моем приложении для iOS есть несколько кнопок. У некоторых из них есть буквы в их именах; другие просто названы с номерами. Я пытаюсь написать тестовый скрипт UI. В этом скрипте у меня есть массив с названием button, который представляет массив объектов UIAElement, соответствующих UIButton.

Если я сделаю следующее, это прекрасно работает:

buttons["clr"].tap();

Я хочу, чтобы это коснулось кнопки с заголовком «clr», и это так.

Но я не могу найти способ нажать на кнопку с заголовком «2». Если я сделаю следующее, он не будет вести себя для меня:

buttons["2"].tap();

Что происходит, так это то, что какая-то часть системы решает нажать кнопку с индексом 2 в массиве. Это не то же самое, что кнопка с именем 2.

Кто-нибудь может объяснить? И есть ли способ заставить его рассматривать мою строку как строку? Я перепробовал несколько вариантов, и ни один из них не помог, например

buttons[String(2)].tap();

РЕДАКТИРОВАТЬ: назвать его чем-то кроме 2 было бы возможно, но неудобно. Приложение представляет собой калькулятор, и 2 выглядит как правильное название для ключа, который делает именно это. Эти имена используются, чтобы представить приложение людям с ограниченными возможностями. Я не знаю всех деталей, но чувствую, что «2», вероятно, сработает лучше, чем «два» в долгосрочной перспективе.

В ответ на вопрос о том, как я заполняю свой массив, он через класс Apple UIAElement . В частности, у меня есть объектное окно, которое также является UIAElement, и я заполняю его

var buttons=window.buttons();

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Вы должны использовать «простой» объект, а не массив:

var buttons = {};

Затем вы читаете и пишете свойства, используя тот же синтаксис в квадратных скобках, что и для массива:

buttons["2"]

Массивы JavaScript - это специализированный тип объекта, который будет по-разному обрабатывать числовые индексы (даже если вы пытаетесь указать их как строку).

Для получения дополнительной информации прочитайте следующее:

1 голос
/ 27 марта 2012

Следующий код решил мою проблему.Но я все еще заинтересован в основной языковой проблеме.

var twoButton = buttons.firstWithPredicate("name=='2'");
...