2013-03-26 5 views
3

Cordova 라이브러리를 사용하는 xamarin 앱을 작성하려고합니다. 나는 필자가 필요로하는 라이브러리 구성 요소에 대한 필자의 바인딩을 위해 노력해 왔으며, 지금까지는 잘 작동했다.Xamarin.iOS에서 기본 유형 및 프로토콜에 바인딩하는 방법

오늘 나는 흥미로운 문제에 부딪쳤다. CDVViewContaineravailable here에서 webView: shouldStartLoadWithRequest: 메서드를 무시하려고했습니다.

Xamarin Binding Guide 및 Xamarin Advanced Binding guide을 살펴 보았습니다. 프로토콜은 인터페이스와 유사하게, 그리고 고급 바인딩 가이드에 도시 ​​된 바와 같이

@interface UITextField : UIControl <UITextInput> { 

} 

는이를 바탕으로

[BaseType (typeof (UIControl))] 
interface UITextField : UITextInput { 
} 

로 번역 것이라고이 주 모두, 나는

@interface CDVViewController : UIViewController <UIWebViewDelegate, CDVScreenOrientationDelegate>{ 

} 

번역 에

[BaseType (typeof (UIViewController))] 
interface CDVViewController : UIWebViewDelegate { 

} 

내 바인딩 라이브러리를 만들기 위해 시도 할 때, 나는

Cordova.cs(26,39): error CS0527L Type `MonoTouch.UIKit.UIWebViewDelegate' in interface list is not an interface. 

를 얻을 나는 애플 사양을 확인하고 this is in fact a Protocol. 아무도 내가 뭘 잘못하고 있는지 알아낼 수 있습니까?

답변

5

이것은 도구의 제한 사항입니다. 이 구문을 사용하여 자체 정의를 포함 할 때 프로토콜을 채택 할 수 있습니다. 외부 정의에 정의 된 프로토콜을 채택 할 때 작동하지 않습니다.

+0

phonegap에 대한 네이티브 바인딩을 수행하려고 할 때, 그리고 많은 클래스에서 폼을 기본 클래스로 상속하고 여러 프로토콜을 구현할 때와 같이 불행합니다. 지금까지 살펴 보았던 가장 좋은 방법은 프로토콜의 모든 메소드를 바인딩 클래스 정의에 추가하는 것입니다. –

+0

위의 클래스를 확장하려고하면 분명히 세그먼트 오류가 발생합니다 (http://stackoverflow.com/questions/15693762/monotouch-application-exits-unexpectedly-code-0-code-1-segmatation-fault-11). 클래스를 확장 할 때 기본 메서드를 호출하면 기본 메서드를 호출하는 원래 메서드가 다시 호출되는 것 같습니다. 세그먼트 화 오류가 발생할 때까지 반복합니다. –

+0

아마도 나는 그 해답을 완전히 이해하지 못하고 있습니다. 사용자 정의 프로토콜을 채택하고 있으므로 동일한 API 정의에 프로토콜의 정의를 포함하는 경우에만이 기능이 작동한다고 말하는 것입니까? 나는 UIGestureRecognizerDelegate를 채택 중이며 같은 오류가 발생하지만 어셈블리의 바인딩을 내 바인딩 클래스에 복사했지만 여전히 오류가 해결되지 않습니다. – winnicki

관련 문제