我执行以下操作:
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;
}
} );
但是当我尝试在对象上使用“each”函数时,我从mainWindow.tableViews()[0] .cells()获取,“[object UIAElementNil]不是函数”发生。为什么我添加到UIAElementArray.prototype的每个属性都设置为[object UIAElementNil]?这样的事情发生了,当我在真实设备上运行UIAutomation测试时,在模拟器上它出乎意料地工作了。
答案 0 :(得分:1)
绝对可以扩展UIAElementArray(不是,顺便说一句,目标-c)。 tuneup.js使用您在上面使用的相同方法并且工作正常,并且我使用相同的方法来扩展UIAElementArray。我不能说你为什么你的脚本报告你正在击中UIAElementNil,但你对UIAElementArray的扩展似乎是正确的。
这里的真正问题可能是“为什么这会在模拟器上运行,而不是在设备上运行?”。设备是否运行iOS 5或更高版本?我已经看到iOS 4.3设备在使用5记录或写入的脚本时运行良好(大部分),但我也看到更复杂的脚本在4.3设备上变得不稳定。
答案 1 :(得分:-3)
在Objective-C中,您可以扩展任何类,并使用类别将自定义方法添加到它们。