2012-04-25 8 views
1

나는 다음을 수행하십시오내 자신의 메서드를 사용하여 UIAElementArray를 확장 할 수 있습니까?

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 테스트를 실제 장치에서 실행하면 놀랍게도 작동합니다.

답변

-3

Objective-C에서는 모든 클래스를 확장하고 범주를 사용하여 사용자 지정 메서드를 추가 할 수 있습니다.

+0

이 답변은이 요점을 완전히 놓칩니다. 질문은 JavaScript 기반 UIAutomation에있었습니다. ObjectiveC와는 아무런 상관 관계가 없습니다. – Till

1

절대적으로 UIAElementArray (btw, objective-c가 아님)를 확장 할 수 있습니다. tuneup.js는 위에서 사용했던 것과 동일한 메소드를 사용하며 잘 작동합니다. 그리고 UIAElementArray를 확장하기 위해 동일한 메소드를 사용했습니다. 귀하의 스크립트에서 UIAElementNil을 치고 있다고보고하는 이유에 대해서는 말할 수 없지만 UIAElementArray에 대한 귀하의 확장이 정확한 것 같습니다.

여기 실제 문제는 "시뮬레이터에서는 왜 작동 하나 장치가 아닌가?"일 수 있습니다. 기기가 iOS 5 이상을 실행합니까? 필자는 iOS 4.3 장비가 5로 기록되거나 기록 된 스크립트로 (대부분) 잘 작동하는 것을 보았습니다. 그러나 4.3 장비에서 불안정한 스크립트가 더 복잡해지는 것을 보았습니다.

관련 문제