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() から取得したオブジェクトで「各」関数を使用しようとすると、「[オブジェクト 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 に答える