1

我执行以下操作:

function extend(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
};

extend( UIAElementArray.prototype, 
{
       each: function(f) 
       {
        for (i = 0; i < this.length; i++) 
        {
          f(i, this[i]);
        }
       },

       findFirst: function(f) 
       {
         for (i = 0; i < this.length; i++) 
         {
           if (f(this[i])) return this[i];
         }
         return null;
       },

       findLast: function(f) 
       {
         for (i = this.length - 1; i >= 0; i--) 
         {
          if (f(this[i])) return this[i];
         }
         return null;
       }
} );

但是,当我尝试对从 mainWindow.tableViews()[0].cells() 获得的对象使用“每个”函数时,会发生“[object UIAElementNil] 不是函数”。为什么我添加到 UIAElementArray.prototype 的每个属性都设置为 [object UIAElementNil]?这样的事情发生了,当我在真实设备上运行 UIAutomation 测试时,它在模拟器上工作,令人惊讶。

4

2 回答 2

1

绝对可以扩展 UIAElementArray (不是,顺便说一句,objective-c)。tuneup.js 使用您在上面使用的相同方法并且工作正常,并且我使用相同的方法来扩展 UIAElementArray。我无法解释为什么您的脚本报告您正在点击 UIAElementNil,但您对 UIAElementArray 的扩展似乎是正确的。

这里真正的问题可能是“为什么这在模拟器上有效,但在设备上无效?”。设备是否运行 iOS 5 或更高版本?我已经看到 iOS 4.3 设备(大部分情况下)在使用 5 录制或编写的脚本时运行良好,但我也看到更复杂的脚本在 4.3 设备上变得不稳定。

于 2012-05-15T19:49:23.620 回答
-3

在 Objective-C 中,您可以扩展任何类并使用类别向它们添加自定义方法。

于 2012-04-25T14:07:21.130 回答