私は、MonoTouchバインディングを書き込もうとしているネイティブライブラリに対して次のプロトコルを使用しています(Brspと呼ばれるインターフェイス部分もあります)。
@protocol BrspDelegate <NSObject>
@required
- (void)brsp:(Brsp*)brsp OpenStatusChanged:(BOOL)isOpen;
- (void)brsp:(Brsp*)brsp SendingStatusChanged:(BOOL)isSending;
@optional
- (void)brspDataReceived:(Brsp*)brsp;
- (void)brsp:(Brsp*)brsp ErrorReceived:(NSError*)error;
- (void)brspModeChanged:(Brsp*)brsp BRSPMode:(BrspMode)mode;
@end
モノタッチバインディング:
[BaseType(typeof(NSObject))]
[Model]
interface BrspDelegate
{
[Abstract]
[Export("brsp:OpenStatusChanged:"), EventArgs("OpenStatus")]
void OpenStatusChanged(Brsp brsp, bool isOpen);
[Abstract]
[Export("brsp:SendingStatusChanged:"), EventArgs("SendingStatus")]
void SendingStatusChanged(Brsp brsp, bool isSending);
[Export("brspDataReceived:")]
void DataReceived(Brsp brsp);
[Export("brsp:ErrorReceived:"), EventArgs("Error")]
void ErrorReceived(Brsp brsp, NSError error);
[Export("brspModeChanged:"), EventArgs("Mode")]
void ModeChanged(Brsp brsp, BrspMode mode);
}
オープンステータス、送信ステータス、エラー受信メソッドが呼び出されていますが、変更されたモードは機能しません。したがって、DelegateはBrspクラスで直接参照されるため、その部分は機能するはずです。ある時点でmodechangedも機能するようになったので、Brspクラスで「changeMode」を呼び出すとそれが呼び出されることを知っています。しかし、それから私はそれを台無しにしました、そして今それはもう動作しません...
また、現在、イベントベースのアプローチではなく、Delegateプライベートクラスを使用しています。上記のメソッドのいずれかで生成されたイベントをフックしようとすると、MonoTouchからのエラーや警告なしにアプリケーションがクラッシュするためです。
バインディングで何かが100%正しくないのではないかと思うので、メソッドは正しく接着されていませんが、私は多くのさまざまなことを試しましたが、これはうまくいくはずです...
何か案は?